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和
之间没有隐式转换List<long>
答案 0 :(得分:3)
错误是由于conditional operator (也称为三元运算符) ?
。假设返回单个类型的对象,因为long
和List<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);
答案 1 :(得分:2)
?操作要求表达式具有相同的类型。您可以手动(显式)将foo和bar转换为对象类型为相同类型,如下所示:
list.Add(new { someProp = someBool ? (object)foo : bar });
答案 2 :(得分:0)
first_expression
和second_expression
的类型必须是。{ 相同,或隐式转换必须存在于一种类型。
正如错误所述,long
和List<long>
之间没有隐式转换。 long
是整数类型,List<long>
是泛型类型。
作为替代方案,您可以使用与object
的明确对话,例如:
(object)foo : (object)bar