Skip to main content
 首页 » 编程设计

c#之使用 Lambda 和 C# 将对象的通用列表转换为定义的集合类

2024年01月26日29arxive

这是我在两个使用 3 层结构的不同工作中看到的问题,但还没有找到一个干净的解决方法。我相信这也适用于使用 LINQ 语句。

我有 2 个类,一个是对象,另一个是那些可能具有一些附加功能的对象的已定义集合:

    public class TestObject 
    { 
       public Int32 id     {get; set;} 
       public string value {get; set;} 
    } 
 
    public class TestObjectCollection: List<TestObject> 
    { 
       public TestObject Get(Int32 id) 
       { 
          return this.FirstOrDefault(item => item.id==id); 
       } 
    } 

假设我使用如下 lambda 表达式:

    List<TestObject> result = data.Where(item => item.id > 0).ToList(); 

有没有一种简单的方法可以将该对象列表转换为我定义的集合,而无需执行以下操作:

    TestObjectCollection resultAsCollection = new TestObjectCollection() 
    resultAsCollection.AddRange(result); 

似乎应该有一种方法可以将 Lambda 表达式返回的我的 GenericList 转换为我的 TestObjectCollection,而无需添加循环遍历我返回的结果的步骤。

请您参考如下方法:

不,没有。 ToList创建一个 List<T> - 而且没有办法类型转换普通的 List<T>到 TestObjectCollection无需创建新的 TestObjectCollection .

我个人会避免创建从 List<T> 派生的集合完全没有(我几乎总是改用组合)但是如果您真的想要拥有那个集合,最简单的方法是创建您自己的扩展方法:

public static class TestEnumerable 
{ 
     public static TestObjectCollection ToTestObjectCollection(this IEnumerable<TestObject> source) 
     { 
         return new TestObjectCollection(source); 
     } 
} 

... 并实现适当的构造函数,当然,它可能只是链接到 List(IEnumerable<T>)构造函数。然后你可以这样写:

var resultAsCollection = data.Where(item => item.id > 0).ToTestObjectCollection();