gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:47 25 4
gpt4 key购买 nike

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

关于c# - 使用 Lambda 和 C# 将对象的通用列表转换为定义的集合类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com