gpt4 book ai didi

c# - C# 中列表的继承,以及在 FindAll() 之后的显式转换

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:22 24 4
gpt4 key购买 nike

我有一个类,它是一个通用列表的子类。我这样做是为了实现我需要在这种列表上定期调用的 toJSONString()。所以我的课是这样的:

public class Foos : List<Foo>
{
public string toJSONString()
{
//Do something here
}
}

在另一个类中,我有一个方法可以做到这一点:

public class Bar
{
private Foos m_Foos = new m_Foos();

public Foos filterWith(Query p_query)
{
Foos newList = m_Foos.FindAll(
// Make a test through a delegate
});

return (newList);
}
}

我收到这个错误:

Error CS0266: Cannot implicitly convert type System.Collections.Generic.List<Foo>' toFoos'. An explicit conversion exists (are you missing a cast?) (CS0266) (Assembly-CSharp)

问题是 m_Foos.FindAll(...) 返回“List”而不是“Foos”。显式转换不起作用,因为我会遇到运行时错误。

我已阅读这篇文章,但它似乎没有为我的问题提供适当的解决方案: C# - Why can I not cast a List<MyObject> to a class that inherits from List<MyObject>?

最佳答案

不要为了添加这种格式化方法而编写新类。在您的列表中使用扩展方法:

public static class FooListExtensions
{
public static string toJSONString(this List<Foo> list)
{
return "...";
}
}

然后你可以简单地:

List<Foo> list = new List<Foo>();
var str = list.toJSONString();

关于c# - C# 中列表的继承,以及在 FindAll() 之后的显式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24736892/

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