根据公共语言规范,具有数组参数的方法的重载决策基于它们是数组的事实及其元素类型。所以下面的代码应该是兼容的(它是),因为它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。