值
规则 ID
CA2011
类别
可靠性
修复是中断修复还是非中断修复
非中断
原因
属性在其自身的 set 访问器中被意外赋值。
规则说明
在属性的 set 访问器中将属性赋值给其自身会导致对 set 访问器的无限递归调用链。 这将在运行时产生 StackOverflowException。 当属性和用于存储属性值的支持字段具有相似的名称时,这种错误很常见。 值意外地赋值给属性本身,而不是赋值给支持字段。
如何解决冲突
要解决冲突,请将对属性的违规赋值替换为对支持字段的赋值,或切换为使用自动属性。 例如,以下代码片段显示了对此规则的违反以及进行解决的几种方法:
public class C
{
// Backing field for property 'P'
private int p;
public int P
{
get
{
return p;
}
set
{
// CA2011: Accidentally assigned to property, instead of the backing field.
P = value;
}
}
}
public class C
{
// Backing field for property 'P'
private int _p;
public int P
{
get
{
return _p;
}
set
{
// Option 1: Assign to backing field and rename the backing field for clarity.
_p = value;
}
}
}
public class C
{
// Option 2: Use auto-property.
public int P { get; set; }
}
何时禁止显示警告
如果确定对 set 访问器的递归调用有条件地受到保护以防止无限递归,则可以禁止显示此规则引发的冲突。
相关规则
CA2245:请勿将属性分配给其自身
另请参阅
可靠性规则
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。