对象列表中的动态数据类型
本文关键字:动态 数据类型 列表 对象 | 更新日期: 2023-09-27 18:15:01
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>
之间没有隐式转换
错误是由于条件运算符(也称为三元运算符) ?
。假定返回对象的单一类型,因为long
和List<long>
不同。你会得到错误。
first_expression和second_expression 的类型必须是必须存在相同的、或从一个类型到另一个类型的隐式转换。
一个最简单和更易读的替代(IMO)是:
if (someProp == someBool)
list.Add(new { someProp = foo });
else
list.Add(new { someProp = bar });
但上述两个将是不同的Anonymous type
对象。
或者您可以摆脱匿名对象,并简单地将两个添加到列表中,因为它是List<object>
,如:
if (someProp == someBool)
list.Add(foo);
else
list.Add(bar);
?操作符要求表达式具有相同的类型。您可以手动(显式)将foo和bar转换为相同的对象类型,如下所示:
list.Add(new { someProp = someBool ? (object)foo : bar });
From ?: Operator
first_expression
和second_expression
的类型必须是,否则必须存在从一种类型到另一种类型的隐式转换。
如错误所示,long
和List<long>
之间没有隐式转换。long
为整型,List<long>
为泛型。
作为另一种选择,您可以使用显式对话与它们都到object
,如:
(object)foo : (object)bar