如何使用匿名类型
本文关键字:类型 何使用 | 更新日期: 2023-09-27 17:59:22
我有这个代码:
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;
}
我想做的是使用相同的匿名类型从两个不同的列表中选择一个ID列表。因此,我使用Select(x => new { ID = x.ID })
为每个表创建匿名类型,以便只有一个for循环
引发的错误是"无法将类型IEnumerable隐式转换为List"
知道吗?
假设MyObjectOne
和MyObjectTwo
中的ID
都是int
的,如果用AsEnumerable
:替换ToList
,则代码将工作
var result = new[] { new { ID = 0 } }.AsEnumerable();
如果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 });