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

标签 c# asp.net asp.net-mvc-4

如何实现下面这样的事情?

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/

相关文章:

c# - 列出并连接到蓝牙设备

c# - 获得最大。对象列表中的值

c# - 如何解决无效对象名称 'dbo.AspNetUsers' 错误?

c# - 由于以下错误 : 80070005 Access is denied,检索具有 CLSID 的组件的 COM 类工厂失败

asp.net-mvc - 将用户名传递给 ASP.NET MVC 4 中的 Web Api 方法

c# - 如何在不丢失原始颜色轨迹的情况下使背景颜色动画为新颜色并返回?

c# - ASP.NET 项目中的 AIML Bot 无法找到 CONFIG 文件?

mysql - 关于显示类别广告计数器的给定查询有什么问题?

ASP.NET Viewstate - 寻求有关支持文章的澄清

asp.net-mvc-3 - Moles 在 VS2010 中创建的程序集在安装 VS2012 后引用 MVC3 和 MVC4