【发布时间】:2021-09-06 15:23:04
【问题描述】:
我仅使用代码分析来清理、组织和确保针对特定警告的所有实例全局执行这些更改。我进入决赛了,它是 CA2227。
CA2227 集合属性应为只读 将“”更改为 通过删除属性设置器来只读。
请注意,这是用于 EDI 文档的映射。这些类用于表示整个或部分 EDI 文档。
public class PO1Loop
{
public SegmentTypes.PO1LoopSegmentTypes.PO1 PO1 { get; set; }
public Collection<SegmentTypes.PO1LoopSegmentTypes.PID1> PIDRepeat1 { get; set; }
public Collection<SegmentTypes.PO1LoopSegmentTypes.PID2> PIDRepeat2 { get; set; }
public SegmentTypes.PO1LoopSegmentTypes.PO4 PO4 { get; set; }
/* Max Use: 8 */
public Collection<SegmentTypes.PO1LoopSegmentTypes.ACK> ACKRepeat { get; set; }
}
你可以看到所有的 Collection 属性都会给我这个警告,而且有数百个。使用上述类时,我在没有任何数据的情况下实例化它。然后在外部我添加数据并通过其公共访问器设置每个单独的变量。我没有使用构造函数方法准备和传递所有数据来实例化这个类(IMO 对于这些可以达到的大小很容易对眼睛造成严重破坏)。完成并分配所有属性后,该类作为一个整体用于生成它所代表的文档部分。
我的问题是,对于上述用法,正确设置它的更好方法是什么?我是保留公共访问者并完全禁止此警告,还是有完全不同的解决方案可行?
【问题讨论】:
-
什么是设置属性?你能让二传手
private或internal吗?如果不是,我只会取消警告。 -
你真的在课外设置为
PO1Loop.PIDRepeat1 = new Collection<SegmentTypes.PO1LoopSegmentTypes.PID1>();吗?如果您只是集合中的adding、removing或altering元素,则删除不必要的set。 -
您可以只公开公共吸气剂并在您拥有值时对它们执行
AddRange。更好的选择是忽略此建议。 -
该错误的 MSDN 页面给出了它背后的基本原理以及如何实施以避免它的建议。 msdn.microsoft.com/en-us/library/…
-
@EBrown 我是课外设置。这个想法是拥有一个组成一组特定 EDI 文档的组件库。从处理和生成这些文档的项目中,它被“填充”
标签: c# visual-studio code-analysis