Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何使用匿名类型_C#_Linq - Fatal编程技术网

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 });