关于CA1819 msdn性能警告规则:
属性返回的数组没有写保护,即使是 属性是只读的。为了保持阵列防篡改,属性 必须返回数组的副本。通常,用户不会理解 称这种财产的不利表现影响。 具体来说,他们可能会将该属性用作索引属性。
我想知道其他对象在属性返回时是否可变,或者这是否只发生在数组中?如果它只对数组有效,为什么?
答案 0 :(得分:3)
假设你有:
int[] ints = new int[] { 1, 2, 3, 4 }
public int[] Ints { get { return ints; } }
班上的消费者可以这样做:
instance.Ints[0] = 10;
所以你允许修改类的数据。
为了防止这种情况,您可以这样做:
public IEnumerable<int> Ints { get { return ints; } }
因此,您班级的消费者只能读取值而不能修改。
现在,为什么?
如果你想让我们修改数组的数据,那么它取决于你的类的设计,警告警告你,你可能希望数组的值不能被操作,因为你没有{属性中的{1}}。
PS:有许多方法,比如readonly collection等,以防止改变你的收藏
查看this