CA1819:属性不应返回数组 - 什么是正确的替代方案?

Efr*_*ain 13 .net c# fxcop

之前我遇到过这个FxCop规则,并不满足于如何解决违规(thread1,thread2).我现在有另一个案例需要纠正违反CA1819的行为.

具体来说,我有一个算法库,它在曲线(x,y)上执行一些分析计算,公共"输入对象"如下:

public class InputObject
{
        public double[] X { get; set; }
        public double[] Y { get; set; }
        // + lots of other things well
}
Run Code Online (Sandbox Code Playgroud)

此对象的X和Y属性在库中的数百个位置中使用,通常使用索引.输入对象永远不会被算法改变,但实际上它应该无关紧要.而且,.Length经常被称为.它是一个数学库,并且double[]是那里的标准数据类型.无论如何,修复CA1819将需要相当多的工作.

我考虑使用List<double>,因为Lists支持索引并且与数组非常相似,但我不确定这是否会减慢算法速度或者FxCop是否会对这些列表感到满意.

更换这些double[]属性的最佳选择是什么?

Moh*_*bed 8

如果它只读给外部消费者并且消费者不希望通过索引访问它,那么最好是拥有一个IEnumerable<>带有方法访问器的类型的公共只读属性来添加和删除,这样你就不必将你的数组暴露给有人搞砸了.

如果需要访问索引器,则将其公开为类型的只读属性,IList<>并可能返回ReadOnly实例,并添加和删除方法.

这样,您可以保留内部列表的封装,并允许使用者以只读方式访问它