c# - Linq 转换为列表<T>

标签 c# linq

我有以下类(class):

public class Column
{
    public String Name;
    public String Value;
}

public class ColumnList : List<Column> {}

然后我做:

var cols = (from c in othercolumnlist
            select new Column
            {
               Name = c.Name,
            }).ToList() as ColumnList;

但是它返回空值。我怎样才能成功地转换到我的名单中?

最佳答案

ColumnListList<Column>但是List<Column>不是 ColumnList .考虑 AnimalDog类:

public class Animal
{
}

public class Dog: Animal
{
}

你要做的是把任何动物都当作狗来对待。但并非所有动物都是狗。可以有 CatKangaroo .这就是为什么 as ColumnList返回 null .

您需要创建新的 ColumnList改为实例并手动向其添加列:

var columnList = new ColumnList();
columnList.AddRange(othercolumnlist.Select(c => new Column { Name = c.Name }));

如果您需要经常这样做,那么您可以将静态创建方法添加到您的ColumnList类:

public static ColumnList CreateFrom(ColumnList other)
{
     var columnList = new ColumnList();
     columnList.AddRange(other.Select(c => new Column { Name = c.Name }));
     return columnList;
}

并以这种方式使用它:

var columnList = ColumnList.CreateFrom(otherColumnList);

关于c# - Linq 转换为列表<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22611926/

相关文章:

c# - 如何在存储库中正确处理 Linq to SQL DataContext?

C# 滚动到列表框的顶部

c# - 在多台机器上开发时无法运行 VSPackage

c# - LINQ 中的动态位置

c# - 使用 LINQ 获取二维数组的最大列数

c# - 按总金额分组项目

c# - Visual C# 在 Appdata 中存储和读取自定义 XML 中的自定义选项

c# - 查找动态创建的控件

c# - 根据父节点属性值获取子节点属性值

c# - 使用 LINQ 的不同字典