我正在编写一个库而不是从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时,都必须创建一个新的字节数组.为什么?因为有人可能改变了你上次发放的那个有不同的内容!通过分发字节数组,您可以保证每次都必须从头开始重建该字节数组.
相比之下,如果您分发一个只读字节集合,那么您可以一遍又一遍地分发相同的集合.你知道它不会改变.
这个库的客户端总是希望事物以字节数组的形式存在,以便它们与框架的其余部分很好地连接.
你有答案 - 在大多数情况下,FxCop输出只是有用的建议 - 而不是命令 - 如果这个特殊的不适用于你,你甚至可以关闭它.