我正在阅读XNA库代码并在类型VertexPositionColor
内,他们用CA2105:ArrayFieldsShouldNotBeReadOnly
消息来理解“每次使用时克隆数组的性能成本太高了。”< / p>
public struct VertexPositionColor
{
public static readonly VertexElement [ ] VertexElements;
}
但为什么在使用它时会被复制?这仅适用于访问的属性/字段为ValueType
的结构,对吧?
答案 0 :(得分:3)
我猜他们证明了他们比其他任何事情更多地暴露了array
field
这一事实,而他们这样做的根本原因是绩效:
他们可能想到的另一种选择是array
field
私有,property
公开IEnumerable
或返回array
的副本<{1}}加入的时间。
EDIT。编辑了一点答案,使我想说的更清楚:p。
答案 1 :(得分:1)
在大多数情况下,他们最好使用Array.AsReadOnly并返回通用的ReadOnlyCollection。根据O(1)操作的文档。
在当前实现中,调用者可以更改数组中的值(直接修改static / global 状态)。
阅读Framework Design Guidelines的另一个原因 - 它为您提供了FxCop建议背后的原因。