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

时间:2013-09-09 13:35:56

标签: c# arrays visual-studio-2012 code-analysis msdn

关于CA1819 msdn性能警告规则:

  

属性返回的数组没有写保护,即使是   属性是只读的。为了保持阵列防篡改,属性   必须返回数组的副本。通常,用户不会理解   称这种财产的不利表现影响。   具体来说,他们可能会将该属性用作索引属性。

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

1 个答案:

答案 0 :(得分: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; } }

因此,您班级的消费者只能读取值而不能修改。

现在,为什么?

如果你想让我们修改数组的数据,那么它取决于你的类的设计,警告警告你,你可能希望数组的值不能被操作,因为你没有{属性中的{1}}。

PS:有许多方法,比如readonly collection等,以防止改变你的收藏

查看this