首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CA2011:请勿在其资源库中分配属性

CA2011:请勿在其资源库中分配属性

作者头像
用户4268038
发布2022-02-20 19:31:30
发布2022-02-20 19:31:30
3990
举报
文章被收录于专栏:stcnbstcnb

规则 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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档