我不知道为什么代码分析(在VS 2012)发出返回一个数组的“CA1819:属性不应返回数组”,为下面的代码:替代从一个属性的getter
private byte[] BackingFieldData;
public byte[] Data
{
get { return this.BackingFieldData; }
set { this.BackingFieldData = value; }
}
的说明警告状态属性返回的数组不受写保护,即使该属性是只读的。为了防止数组防篡改,该属性必须返回数组的副本。
我想要的是返回数组。用户应该能够修改数组,但不应该调整它的大小。数组的大小经常被用户访问。用户必须能够通过索引访问元素。因此数组类型似乎完全适合。
候补委员,我认为是IEnumerable<byte>
,IList<byte>
(索引使用Skip
和Take
等非常完成)(侧重于添加和删除元素 - 我不希望出现这种情况),并ReadOnlyCollection<byte>
(我讨厌类公开方法总是扔NotSupportedException
s,远离良好的编码风格恕我直言)。我还想过在数组周围创建一个包装类的自定义接口 - 但是,这有什么意义呢(除了我可以在不压制它的情况下摆脱这个警告)。
因此,没有人知道一个良好的类型返回数组类型或一个很好的理由不要在这种情况下返回数组呢?我到目前为止没有提到什么影响?
+1对于'私有化':D(因为如果不允许他们改变长度,这是一个好点)。 – Rawling
+1 public setter是一个错误,我总是看到任何集合类型。 –
对不起,5行代码已经是bug了;-)。在我的实施中根本没有二传手。只有在演示代码中;我想看看是否也有警告,如果有setter可用... – Korexio