繁体   English   中英

如何使用匿名类型

[英]how to use an Anonymous Type

我有这个代码:

    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

任何想法?

假设MyObjectOneMyObjectTwo中的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 });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM