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

看看this

关于c# - CA1819 : Properties should not return arrays.此规则是否也适用于其他对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18699478/

10-11 22:38