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

C# FxCop说我应该返回一个通用列表接口,而不是字节数组。我应该吗?,c#,list,fxcop,C#,List,Fxcop,我正在编写一个库,它不是从EventArgs派生返回字节数组,而是说我应该返回类似IList或ReadOnlyCollection的内容 通常情况下,我完全支持这一点,但现有的.NET框架中的大多数都使用字节数组,而不是通用的列表接口 因此,如果我要使用IList,那么在访问eventargs时,如果客户机想要调用,他或她必须使用System.Linq执行并调用ToArray扩展方法以字节数组的形式获取IList。当然,还有其他方法可以做到这一点,但这是最优雅和典型的 这个库的客户端总是希望以字

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

通常情况下,我完全支持这一点,但现有的.NET框架中的大多数都使用字节数组,而不是通用的列表接口

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

这个库的客户端总是希望以字节数组的形式进行操作,以便与框架的其余部分进行良好的接口

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

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

这个图书馆的客户总是希望一切都是合理的 一个字节数组,以便它们与 框架


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

FxCop提供的指南和建议并不总是适用于所有情况。你不需要跟随他们,在某些情况下你不应该

可能会有大量字节被操纵,因此每次都必须重新复制整个列表才能以字节数组的形式获得它,这可能会降低速度

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

byte[] x1 = GetByteArray();
x1[0] = 0;
byte[] x2 = GetByteArray();
每次调用GetByteArray时,都必须创建一个新的字节数组。为什么?因为有人可能已经改变了你上次分发的内容!通过分发一个字节数组,您可以保证每次都必须从头开始重建该字节数组


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

做最有意义的事。FxCop只是一个帮助你的工具。@Chad:是的,但我不确定哪一个最有意义。每种方法都有利弊,我不确定该选哪一种。返回列表接口使其更具可扩展性和通用性,但根据客户对数据的需求,可能会或不会让客户感到痛苦。此外,由于必须复制阵列,因此速度可能会变慢。@Ryan,如果客户想要一个列表来处理阵列中的数据,他们可以很容易地创建一个列表。关闭有用的建议就像忽略当你开始开车时没有系好安全带时出现的安全带指示灯一样。