gpt4 book ai didi

c# - 从库而不是数组返回什么集合类型?

转载 作者:太空狗 更新时间:2023-10-30 01:25:06 26 4
gpt4 key购买 nike

所讨论的数组是一个字节流。只返回一个数组的问题是它不是只读的,因此库的客户端可以修改它的内容。

包装数组的方式有很多种,我不确定该选择哪种:

IEnumerable, IList, List, ReadOnlyCollection, Collection, et cetera.

此外,返回类型可以与实际实例化类型不同。

我最初的方法是做这样的事情:

Data = new ReadOnlyCollection<byte>(data);

在哪里data是一个字节数组。 Data 属性将是某种接口(interface)类型(IEnuerable、IList 等)。但是,我不确定要使用哪个。我看到很多人推荐 IEnumerable,因为它非常标准,但这里的顺序很重要,在我看来,字节流应该保持与数组的语法相似性。 IEnumerable 不允许访问单个索引,因此它显然不是这里的最佳选择。

IList 不是只读的,所以我想 ICollection 是正确的..?真的不确定。集合类型似乎太多了,我对使用哪种有点困惑。

最佳答案

我很想返回 IList<byte>并记录该列表是不可变的。这为您提供了稍后更改实现的灵 active ,但意味着调用者不需要使用 IEnumerable<T> 的“最小公分母”。 .

使用 IList<byte>作为声明类型,您仍然可以返回 ReadOnlyCollection<byte>作为实现。

或者如 Darin 所述,您可以使用 Stream - 特别是 MemoryStream :

return new MemoryStream(data, false);

那将是一个只读流。如果客户端希望读取数据作为流(例如传递给 XML 解析器或图像加载器等),那将是最好的。您只需要将其声明为返回 Stream - 明确声明它返回 MemoryStream 没有什么好处(当然,除非来电者想调用 ToArray )。您应该记录返回的流是可读的、可查找的,但不可写的。

如果他们真的想把它当作一个集合,IList<T>更好。

关于c# - 从库而不是数组返回什么集合类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7732431/

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