我以前遇到过这个 FxCop 规则,但对如何解决违规问题并不满意(thread1、thread2)。我现在有另一个案例,我需要纠正违反 CA1819 的行为亲切。
具体来说,我有一个算法库,它使用如下所示的公共(public)“输入对象”对曲线 (x,y) 执行一些分析计算:
public class InputObject
{
public double[] X { get; set; }
public double[] Y { get; set; }
// + lots of other things well
}
此对象的 X 和 Y 属性在库中的数百个位置使用,通常使用索引。输入对象永远不会被算法改变,但实际上如果是这样也无关紧要。另外,.Length
经常被调用。这是一个数学图书馆,double[]
是其中的一种标准数据类型。无论如何,修复 CA1819 需要做很多工作。
我考虑过使用 List<double>
,因为列表支持索引并且与数组非常相似,但我不确定这是否会降低算法速度或者 FxCop 是否会对这些列表感到满意。
替换这些的最佳选择是什么 double[]
属性?
最佳答案
如果外部消费者只读并且消费者不想通过索引访问它,那么最好是拥有类型为 IEnumerable<>
的公共(public)只读属性。使用方法访问器来添加和删除,这样你就不必将你的数组暴露给别人来捣乱。
如果您需要访问索引器,则将其公开为 IList<>
类型的只读属性并可能返回一个 ReadOnly 实例,其中包含添加和删除的方法。
这样你就可以保持内部列表的封装并允许消费者以只读方式访问它
关于c# - CA1819 : Properties shouldn't return arrays - What is the right alternative?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820992/