关于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/