我想知道为什么代码分析(在 VS 2012 中)会为以下代码发出“CA1819:属性不应返回数组”:
private byte[] BackingFieldData;
public byte[] Data
{
get { return this.BackingFieldData; }
set { this.BackingFieldData = value; }
}
警告状态的描述属性返回的数组不受写保护,即使该属性是只读的。为了保持数组防篡改,该属性必须返回数组的副本。
我想要的是返回数组。用户应该能够修改数组,但不能调整它的大小。用户经常访问数组的大小。用户必须能够通过索引访问元素。因此,数组类型似乎非常适合。
我考虑过的替代方案是(使用等IEnumerable<byte>
非常好地完成索引),(它专注于添加和删除元素 - 我不想要那个)和(当类公开总是抛出 s 的方法时,我讨厌它,远离良好的编码风格恕我直言)。我还考虑过在数组周围创建一个带有包装类的自定义接口——但这有什么意义(除了我可以在不抑制警告的情况下摆脱警告)。Skip
Take
IList<byte>
ReadOnlyCollection<byte>
NotSupportedException
那么,有没有人知道要返回的好类型而不是数组类型,或者在这种情况下为什么不返回数组的充分理由?到目前为止我没有提到任何影响吗?