CA1819:属性不应返回数组.此规则是否也适用于其他对象

本文关键字:是否 规则 适用于 对象 其他 数组 属性 返回 CA1819 | 更新日期: 2023-09-27 18:30:37

关于 CA1819 msdn 性能警告规则:

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

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

CA1819:属性不应返回数组.此规则是否也适用于其他对象

假设你有:

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:有很多方法,例如只读集合等...,以防止更改您的收藏

看看这个