How to create an object based on some condition

How to reach this level?

dynamic prod = vid.HasValue ? 
              CatalogRepository.GetProductDetailByProductId(pid.Value, vid)
            : CatalogRepository.GetProductDetailByProductId(pid.Value);

GetProductDetailByProductId(pid.Value)returns an object Product, and GetProductDetailByProductId(pid.Value, vid)returns an object ProductVariant.

I assign the object to a dynamic variable, so it must be identified at runtime, but it gives me a type conversion error at compile time.

+4
source share
4 answers

I assume you have a CastException type error.

Transfer your first object to an object, it should compile:

dynamic prod = vid.HasValue ? 
               (dynamic)CatalogRepository.GetProductDetailByProductId(pid.Value, vid) : 
               CatalogRepository.GetProductDetailByProductId(pid.Value);

- , , , .

var s = true ? "s" : 1 // doesn't compile, no implicit conversion between string and int

var f = true ? 2.0F : 1 // compile, implicit conversion exist between float and int
+6

, .

Becuase from ?: Operator (C# Reference)

first_expression second_expression ,

, Product ProductVariant , ..

+3

:

dynamic prod;
if(vid.HasValue)
   prod = CatalogRepository.GetProductDetailByProductId(pid.Value, vid);
else
   prod = CatalogRepository.GetProductDetailByProductId(pid.Value);

( .)

dynamic prod = CatalogRepository.GetProductDetailByProductId(pid.Value, vid??null);
+2

- , dynamic:

public class Union<T1, T2>
{
    private readonly T1 _value1;
    private readonly T2 _value2;

    public Union(T1 value)
    {
        _value1 = value;
    }

    public Union(T2 value)
    {
        _value2 = value;
    }

    public T1 Case1
    {
        get { return _value1; }
    }

    public T2 Case2
    {
        get { return _value2; }
    }
}

var prod = vid.HasValue ? 
    new Union<ProductVariant, Product>(CatalogRepository.GetProductDetailByProductId(pid.Value, vid)) :
    new Union<ProductVariant, Product>(CatalogRepository.GetProductDetailByProductId(pid.Value));

( Union , , , , ..).

0
source

All Articles