C# 对象列表中的动态数据类型 List List=新列表(); long-foo=1; 列表栏=新列表(){1,2,3}; bool someBool=false; 添加(新的{someProp=someBool?foo:bar});
为什么C# 对象列表中的动态数据类型 List List=新列表(); long-foo=1; 列表栏=新列表(){1,2,3}; bool someBool=false; 添加(新的{someProp=someBool?foo:bar});,c#,asp.net,C#,Asp.net,为什么somePropdatatype不能动态运行?数据类型没有指定为对象键,因此我看不出问题 long和列表之间没有隐式转换 该错误是由于(也称为三元运算符)?。由于long和List不同,因此假定返回单个类型的对象。你得到了错误 第一个\u表达式和第二个\u表达式的类型必须为 从一种类型到另一种类型必须存在相同的、或隐式转换 另一个 一个最简单、可读性更高的备选方案(IMO)是: List<object> list = new List<object>(); lon
someProp
datatype不能动态运行?数据类型没有指定为对象键,因此我看不出问题
long和列表之间没有隐式转换
该错误是由于(也称为三元运算符)?
。由于long
和List
不同,因此假定返回单个类型的对象。你得到了错误
第一个\u表达式和第二个\u表达式的类型必须为
从一种类型到另一种类型必须存在相同的、或隐式转换
另一个
一个最简单、可读性更高的备选方案(IMO)是:
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 });
但是上面两个将是不同的匿名类型
对象
或者您可以去掉匿名对象,只需将这两个对象添加到列表中,因为它类似于:
if (someProp == someBool)
list.Add(new { someProp = foo });
else
list.Add(new { someProp = bar });
if (someProp == someBool)
list.Add(foo);
else
list.Add(bar);
从
第一个表达式
和第二个表达式
的类型必须是
相同,或者必须存在从一种类型到另一种类型的隐式转换
正如错误所说,在long
和List
之间没有隐式转换long
是整数类型,List
是泛型类型
另一种方法是,您可以使用与他们两人的显式对话来对象
,例如:
if (someProp == someBool)
list.Add(new { someProp = foo });
else
list.Add(new { someProp = bar });
if (someProp == someBool)
list.Add(foo);
else
list.Add(bar);
那个?运算符要求表达式具有相同的类型。您可以手动(显式)将foo和bar强制转换为相同的对象类型,如下所示:
(object)foo : (object)bar
换句话说,我不能进行内联转换guess@Johan,一种方法是将每个对象强制转换为(对象),但如果使用简单的if
,则更好,因为这样会更具可读性IMOOk,但您的示例会使foo
成为一个列表。但也许是这样necessary@Johan,不foo
将是long
并作为对象添加到List
中。@Johan,哦,不,我明白了,您正在尝试创建一个具有属性someProp
的匿名对象,然后将其添加到列表中。在中有它吗?运算符
将失败,因为执行类似于list.Add的操作(new{someProp=someBool?new{someProp=foo}:new{someProp=bar})代码>将导致两种不同的匿名类型。检查编辑后的答案是否是您要找的。@Downvoter是否愿意发表评论,至少这样我可以看出我可能错在哪里?不是Downvoter,但您是否正在尝试将列表
(条形图)转换为Int64
?@Habib Ups,InvalidCastException。。我完全忘了。谢谢