c# - FxCop 说我应该返回一个通用列表接口(interface)而不是字节数组。我是不是该?

标签 c# list fxcop

<分区>

我正在编写一个库,而不是从 EventArgs 派生返回字节数组,它说我应该返回 IList 或 ReadOnlyCollection 之类的东西。

通常我会全力以赴,但大多数现有的 .NET Framework 使用字节数组而不是通用列表接口(interface)。

因此,如果我要使用 IList,那么在访问 eventargs 时,如果客户端想要调用 File.WriteAllBytes他或她必须执行 using System.Linq; 并调用 ToArray 扩展方法以获取字节数组形式的 IList。当然还有其他方法可以做到这一点,但这是最优雅和典型的。

这个库的客户总是希望事物以字节数组的形式存在,以便它们与框架的其余部分很好地交互。

此外,优化可能会在这里发挥作用。可能会操作大量字节,因此每次都必须重新复制整个列表以获取字节数组的形式可能会减慢速度。

最后,这简直令人不快。如果客户总是想要一个字节数组,那为什么不直接给他们呢?框架设计指南不适用于这种情况吗?你会怎么做?

最佳答案

There is potential for large amounts of bytes to be manipulated so having to recopy the entire list just to get it in the form of a byte array each time would likely slow things down.

但这正是它应该是字节数组的原因。假设您这样做:

byte[] x1 = GetByteArray();
x1[0] = 0;
byte[] x2 = GetByteArray();

每次调用 GetByteArray 时,您都必须创建一个字节数组。为什么?因为可能有人把你上次发的那个改成了不同的内容!通过分发一个字节数组,您可以保证每次都必须从头开始重建该字节数组。

相比之下,如果您分发一个只读的字节集合,那么您可以一遍又一遍地分发相同的集合。你知道它不会改变。

关于c# - FxCop 说我应该返回一个通用列表接口(interface)而不是字节数组。我是不是该?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7773648/

相关文章:

c# - 如何从 ffmpeg 异步流式输出

r - 如何将列表值列拆分为多列?

python - 这是扁平化字典列表的可接受方法吗?

dictionary - 如何让 FxCop 自定义词典发挥作用?

c# - 允许 Windows 使用未经验证的发布者执行应用程序

c# - 根据另一个 DropDownList 的选择动态填充 DropdownList

c# - Page.ClientScript.RegisterStartupScript 不工作

python - 将 Pandas 列的列表拆分为多列

FxCop 和 IComparable/IComparable<T>

.net - 代码分析工具错误 "The given key was not present in the dictionary."