C# 如何使用匿名类型
我有以下代码:C# 如何使用匿名类型,c#,linq,C#,Linq,我有以下代码: List<MyObjectOne> myListOne = new List<MyObjectOne>(){new MyObjectOne { ID = 1, field2 = 2}}; List<MyObjectTwo> myListTwo = new List<MyObjectTwo>(){new MyObjectTwo { ID = 4, field6 = "string"}}; bool hasS
List<MyObjectOne> myListOne = new List<MyObjectOne>(){new MyObjectOne { ID = 1, field2 = 2}};
List<MyObjectTwo> myListTwo = new List<MyObjectTwo>(){new MyObjectTwo { ID = 4, field6 = "string"}};
bool hasSomething = false;
var result = new[] { new {ID = 0 }}.ToList();
if (hasSomething)
{
// Use list one.
result = myListOne.Select(x => new { ID = x.ID});
}
else
{
// Use list two.
result = myListTwo.Select(x => new { ID = x.ID });
}
foreach (var item in result)
{
// Some logic to manipulate item.ID.
item.ID;
}
List myListOne=new List(){new MyObjectOne{ID=1,field2=2};
List mylistwo=new List(){new MyObjectTwo{ID=4,field6=“string”};
bool hasSomething=false;
var result=new[]{new{ID=0}}.ToList();
如果(hasSomething)
{
//使用列表一。
result=myListOne.Select(x=>new{ID=x.ID});
}
其他的
{
//使用列表二。
result=myListTwo.Select(x=>new{ID=x.ID});
}
foreach(结果中的var项目)
{
//操作item.ID的一些逻辑。
项目ID;
}
我试图做的是使用相同的匿名类型从两个不同的列表中选择ID列表。因此,我使用Select(x=>new{ID=x.ID})
为每个表创建匿名类型,以便只有一个for循环。
引发的错误是“无法将类型IEnumerable隐式转换为列表”
?有什么想法吗?假设
MyObjectOne
中的ID
和MyObjectTwo
都是int
,如果您将代码替换为:
如果ID
属性是其他类型(例如long
),则在此处创建匿名类型时需要指定:
var result = new[] { new { ID = 0L } }.AsEnumerable();
或者像这样:
var result = new[] { new { ID = (long)0 } }.AsEnumerable();
然而,这种代码有点令人困惑,我不建议将其用于生产环境。这里有一个替代解决方案,可以避免仅为隐式匿名键入创建“虚拟”对象:
var result = hasSomething
? myListOne.Select(x => new { ID = x.ID })
: myListTwo.Select(x => new { ID = x.ID });
与论坛网站不同,我们不使用“感谢”或“感谢任何帮助”或签名。请参见“.如果我使用var
result=new[]{new{ID=0}}.AsEnumerable();
则引发的错误是:“无法隐式地将类型IEnumerable转换为IEnumerable“。但另一种解决方案非常完美:)@Coyolero如果两个类中的ID
属性都是int
,则不应该抛出该错误。它们是什么类型的?@Coyolero奇怪。我用int
测试了它,效果很好;它只在属性为long
、uint
等时抛出该异常(但即使是这种情况,修复也很容易)。抱歉,我刚刚再次检查了代码,并且ID
属性为long
。如果我把它们改成int
,它就可以工作了。正如我所说的,我会使用替代解决方案,但是,修复方法是什么?@Coyolero查看我的更新答案,了解如何将第一个解决方案与long
结合使用。
var result = hasSomething
? myListOne.Select(x => new { ID = x.ID })
: myListTwo.Select(x => new { ID = x.ID });