5

关于 CA1819 msdn 性能警告规则:

属性返回的数组不受写保护,即使该属性是只读的。为了保持数组防篡改,该属性必须返回数组的副本。通常,用户不会理解调用此类属性对性能的不利影响。具体来说,他们可能将该属性用作索引属性。

我想知道其他对象在由属性返回时是否可变,或者这只发生在数组中?如果它只对数组有效,为什么?

4

1 回答 1

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; } }

所以你的类的消费者只能读取值而不能修改。

现在,为什么?

好吧,如果您想修改数组的数据,这取决于您的类的设计,警告会警告您这样一个事实,即您可能期望数组的值不能被操作,因为您set在属性中没有 a。

PS:有很多方法,例如只读集合等...,以防止更改您的集合

看看这个

于 2013-09-09T13:45:29.043 回答