共通言語仕様によると、配列パラメーターを持つメソッドのオーバーロード解決は、それらが配列であるという事実とその要素の型に基づいています。Double()()
は配列の配列であり、asDouble()
は 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# で同じコードを使用すると、2 番目の 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 を実行しています。