我想知道为什么代码分析(在VS 2012中)为以下代码发出"CA1819:属性不应返回数组":
private byte[] BackingFieldData;
public byte[] Data
{
get { return this.BackingFieldData; }
set { this.BackingFieldData = value; }
}
Run Code Online (Sandbox Code Playgroud)
警告状态的描述属性返回的数组不受写保护,即使该属性是只读的.为了防止数组防篡改,属性必须返回数组的副本.
我想要的是返回数组.用户应该能够修改数组,但不能调整它的大小.用户经常访问阵列的大小.用户必须能够通过索引访问元素.因此阵列类型看起来非常合适.
我考虑过的替代方法IEnumerable<byte>(索引是使用Skip和Take等完成的),IList<byte>(专注于添加和删除元素 - 我不希望这样)和ReadOnlyCollection<byte>(我讨厌当类暴露方法总是抛出NotSupportedExceptions,远离良好的编码风格恕我直言).我还考虑过在数组周围创建一个带有包装类的自定义接口 - 但是重点是什么(除了我可以在不压制它的情况下摆脱警告).
那么,有没有人知道要返回的好类型而不是数组类型或者在这种情况下为什么不返回数组?到目前为止我没有提到任何影响吗?
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |