3
List<object> list = new List<object>();

long foo = 1;
List<long> bar = new List<long>(){ 1,2,3 }; 

bool someBool = false;

list.Add(new { someProp = someBool ? foo : bar });

为什么数据类型不能someProp动态运行?数据类型未指定为对象键,所以我看不到问题。

long 和 long 之间没有隐式转换List<long>

4

3 回答 3

3

该错误是由于条件运算符(也称为三元运算符) ?造成的。假设返回单一类型的对象,因为 longList<long>是不同的。你得到了错误。

first_expression 和 second_expression 的类型必须相同或者必须存在从一种类型到另一种类型的隐式转换。

一个最简单且更具可读性的替代方案(IMO)是:

if (someProp == someBool)
    list.Add(new { someProp = foo });
else
    list.Add(new { someProp = bar });

但以上两个将是不同的Anonymous type对象。

或者您可以摆脱 Anonymous 对象,只需将两者添加到列表中,因为它List<object>就像:

if (someProp == someBool)
    list.Add(foo);
else
    list.Add(bar);
于 2013-05-23T07:34:42.760 回答
2

这 ?运算符要求您的表达式具有相同的类型。您可以手动(显式)将 foo 和 bar 转换为相同类型的对象类型,如下所示:

 list.Add(new { someProp = someBool ? (object)foo : bar });
于 2013-05-23T07:35:34.677 回答
0

?: Operator

first_expression和的类型second_expression 必须相同,或者必须存在从一种类型到另一种类型的隐式转换

long正如错误所说, and之间没有隐式转换List<long>long是整数类型并且List<long>是泛型类型。

作为替代方案,您可以使用与他们俩的明确对话来object喜欢:

(object)foo : (object)bar
于 2013-05-23T07:34:49.687 回答