3

根据公共语言规范,具有数组参数的方法的重载决策基于它们是数组的事实及其元素类型。所以下面的代码应该是兼容的(它是),因为它Double()()是一个数组数组,而 asDouble()是一个双精度数组。

<CLSCompliant(True)> _
Public Class VBTest

  Public Sub ArrayTest(value As Double())
  End Sub

  Public Sub ArrayTest(value As Double()())
  End Sub

End Class

但是,使用 C# 中的相同代码,我在第二个 ArrayTest 方法上收到警告:

“重载方法 'CSTest.ArrayTest(double[][])' 仅因未命名数组类型而异,不符合 CLS”

[CLSCompliant(true)]
public class CSTest
  {
    public void ArrayTest(double[] value){}
    public void ArrayTest(double[][] value){}
  }

如果我正确理解了这条 CLS 规则,C# 对待锯齿状数组的处理方式是否与 VB 不同?或者这是 C# 编译器中的错误?在这两种情况下,我都在运行针对 .NET Framework 4.0 的 VS2010。

4

1 回答 1

3

这是 C# 编译器中记录的错误。在MSDN关于 CLS-Compliant 代码的文章中提到:

笔记

锯齿状数组(即数组的数组)符合 CLS。在 .NET Framework 1.0 版中,C# 编译器错误地报告它们不是。

我检查了4.5,仍然没有修复。

于 2013-08-30T01:54:54.627 回答