gpt4 book ai didi

c# - 对于接口(interface) : T[], IEnumerable、IList 或其他接口(interface),您更喜欢哪个?

转载 作者:可可西里 更新时间:2023-11-01 08:30:53 25 4
gpt4 key购买 nike

好的,我希望整个社区能够帮助我们解决已经持续了一段时间的职场辩论。这与定义接受或返回某种类型列表的接口(interface)有关。有几种方法可以做到这一点:

public interface Foo
{
Bar[] Bars { get; }
IEnumerable<Bar> Bars { get; }
ICollection<Bar> Bars { get; }
IList<Bar> Bars { get; }
}

我自己的偏好是使用 IEnumerable 作为参数,使用数组作为返回值:

public interface Foo
{
void Do(IEnumerable<Bar> bars);
Bar[] Bars { get; }
}

我对这种方法的看法是,实现类可以直接从 IEnumerable 创建一个 List,然后简单地用 List.ToArray() 返回它。但是有些人认为应该返回 IList 而不是数组。我在这里遇到的问题是,现在您需要在返回之前再次使用 ReadOnlyCollection 复制它。返回 IEnumerable 的选项对于客户端代码来说似乎很麻烦?

您使用/喜欢什么? (特别是关于将由您组织外部的其他开发人员使用的库)

最佳答案

我的偏好是 IEnumerable<T> .任何其他建议的接口(interface)都提供了允许消费者修改基础集合的外观。这几乎肯定不是您想要做的,因为它允许消费者静默修改内部集合。

恕我直言,另一个不错的是 ReadOnlyCollection<T> .它允许所有有趣的 .Count 和 Indexer 属性,并明确地告诉消费者“你不能修改我的数据”。

关于c# - 对于接口(interface) : T[], IEnumerable<T>、IList<T> 或其他接口(interface),您更喜欢哪个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1456132/

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