FxCop说我应该返回通用列表接口而不是字节数组.我是不是该?

Rya*_*hel 3 c# fxcop list

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

通常情况下,我会全力以赴,但大多数现有.NET Framework使用字节数组而不是通用列表接口.

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

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

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

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

Eri*_*ert 11

有可能需要操作大量字节,因此必须重新复制整个列表,只是为了以字节数组的形式获取它,每次都可能减慢速度.

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

byte[] x1 = GetByteArray();
x1[0] = 0;
byte[] x2 = GetByteArray();
Run Code Online (Sandbox Code Playgroud)

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

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


Bro*_*ass 5

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

你有答案 - 在大多数情况下,FxCop输出只是有用的建议 - 而不是命令 - 如果这个特殊的不适用于你,你甚至可以关闭它.