这是我在两个使用 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();
