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

时间:2011-10-14 21:14:52

标签: c# list fxcop

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

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

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

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

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

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

3 个答案:

答案 0 :(得分:11)

  

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

但这正是为什么是一个字节数组的原因。假设你这样做:

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

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

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

答案 1 :(得分:5)

  

这个图书馆的客户总是希望有条件   一个字节数组,以便它们与其余部分很好地连接   框架。

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

答案 2 :(得分:2)

FxCop提供的指南和建议并不总是适用于所有情况。你不需要遵循它们,在某些情况下你不应该这样做。