C#和VB中的锯齿状数组CLS兼容性有何不同?

时间:2013-08-30 01:22:33

标签: c# .net arrays vb.net cls-compliant

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

<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#编译器中的错误?我在两种情况下都运行VS2010,目标是.NET Framework 4.0。

1 个答案:

答案 0 :(得分:3)

这是C#编译器中记录的错误。 MSDN article中提到了与CLS兼容的代码:

  

注意

     

Jagged数组 - 即数组数组 - 符合CLS。在.NET Framework 1.0版中,C#编译器错误地报告它们不是。

我检查了4.5,仍未修复。