如何实现下面这样的事情?
dynamic prod = vid.HasValue ?
CatalogRepository.GetProductDetailByProductId(pid.Value, vid)
: CatalogRepository.GetProductDetailByProductId(pid.Value);
GetProductDetailByProductId(pid.Value)
返回 Product
的对象,而 GetProductDetailByProductId(pid.Value, vid)
返回 的对象>ProductVariant
.
我正在将对象分配给一个动态变量,因此它应该在运行时被识别,但它在编译时给我类型转换错误。
最佳答案
我猜你有一个 CastException 类型的错误。
将您的第一个项目转换为一个对象,它应该可以编译:
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
关于c# - 如何根据某些条件创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19653943/