CA1819:属性不应返回数组.此规则是否也适用于其他对象
本文关键字:是否 规则 适用于 对象 其他 数组 属性 返回 CA1819 | 更新日期: 2023-09-27 18:30:37
关于 CA1819 msdn 性能警告规则:
属性返回的数组没有写保护,即使 属性是只读的。为了保持阵列防篡改,属性 必须返回数组的副本。通常,用户不会理解 调用此类属性的不利性能影响。 具体而言,他们可能会将该属性用作索引属性。
我想知道其他对象在属性返回时是否可变,或者这是否只发生在数组上? 如果它只对数组有效,为什么?
假设你有:
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
。
PS:有很多方法,例如只读集合等...,以防止更改您的收藏
看看这个