Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象列表中的动态数据类型 List List=新列表(); long-foo=1; 列表栏=新列表(){1,2,3}; bool someBool=false; 添加(新的{someProp=someBool?foo:bar});_C#_Asp.net - Fatal编程技术网

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。。我完全忘了。谢谢