c# - CA1819 : Properties shouldn't return arrays - What is the right alternative?

标签 c# .net fxcop

我以前遇到过这个 FxCop 规则,但对如何解决违规问题并不满意(thread1thread2)。我现在有另一个案例,我需要纠正违反 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/

相关文章:

c# - 如何获取 Windows 窗体上 PictureBox 的左上角屏幕坐标

c# - ContainsKey 为字符串返回 false

C# - 如何在用户设置中保存文本框和复选框

c# - 奇怪的异常场景 System.Net.Http MediaTypeHeaderValue 无法转换为 MediaTypeHeaderValue

c# - 使用 Assembly.Load(path) 时找不到文件或程序集

c# - 如何添加自定义 FxCop 规则?

.net - FxCop自定义规则-检查Winform控件属性

c# - 使用 LINQ 将 List<dynamic> 转换为 List

c# - 如何在ListView中将两列的值连接成一列

c# - CA1062:共同构造函数调用上的 ValidateArgumentsOfPublicMethods