如何根据某些条件创建对象

Jit*_*oli 4 c# asp.net asp.net-mvc-4

如何实现以下类型的东西?

dynamic prod = vid.HasValue ? 
              CatalogRepository.GetProductDetailByProductId(pid.Value, vid)
            : CatalogRepository.GetProductDetailByProductId(pid.Value);
Run Code Online (Sandbox Code Playgroud)

GetProductDetailByProductId(pid.Value)返回一个Object of Productwhile GetProductDetailByProductId(pid.Value, vid)返回一个Object ProductVariant.

我将对象分配给动态变量,因此应该在运行时识别它,但它在编译时给出了类型转换错误.

Cyr*_*don 6

我猜你有类型CastException的错误.

将您的第一个项目转换为Object,它应该编译:

dynamic prod = vid.HasValue ? 
               (dynamic)CatalogRepository.GetProductDetailByProductId(pid.Value, vid) : 
               CatalogRepository.GetProductDetailByProductId(pid.Value);
Run Code Online (Sandbox Code Playgroud)

出现问题是因为当您使用条件运算符时,编译器会查看第一个类型以确定整个返回的类型,并可能在对象之间应用隐式转换.

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
Run Code Online (Sandbox Code Playgroud)