gpt4 book ai didi

c# - 在 C# 中,将 ICollection 转换为 ICollection 的正确方法是什么?

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

例如:

public interface IFoo
{
//...

ICollection<IFoo> Children { get; }

//...
}

public class Foo : IFoo
{
//...

public ICollection<Foo> Children { get; private set; }

//...

public ICollection<IFoo> IFoo.Children
{
get
{
return Children; // Obviously wrong datatype, how do I cast this?
}
}

//...
}

那么我该如何正确实现 IFoo.Children ?我试过 Children.Cast<IFoo>但这会返回 IEnumerable<IFoo>相反。

最佳答案

你需要考虑清楚。如果此转换可行,代码将被允许将一个完全不同的类对象添加到您的集合中,一个实现 IFoo 但在其他方面与 Foo 完全无关的类对象。您的集合现在将不再是 Foo 的集合。那当然是不允许的。 IEnumerable<> 很好,不能改变集合。 ICollection<> 不是。

获得所需内容的唯一可能方法是创建集合的副本。像List<IFoo> .你当然会为此付出代价。并且无法轻易看到该列表的更改,这是可以修复的。但是您仍然会遇到根本问题,即修改该列表的客户端代码仍然允许添加或删除您不知道如何处理的对象。

关于c# - 在 C# 中,将 ICollection<X> 转换为 ICollection<Y> 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13914850/

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