对象列表中的动态数据类型

本文关键字:动态 数据类型 列表 对象 | 更新日期: 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>之间没有隐式转换

对象列表中的动态数据类型

错误是由于条件运算符(也称为三元运算符) ?。假定返回对象的单一类型,因为longList<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_expressionsecond_expression 的类型必须是,否则必须存在从一种类型到另一种类型的隐式转换。

如错误所示,longList<long>之间没有隐式转换。long为整型,List<long>为泛型。

作为另一种选择,您可以使用显式对话与它们都到object,如:

(object)foo : (object)bar