Fab*_*nay 2 c# int jagged-arrays char implicit-conversion
由于C#编译器可以隐式地将类型'char'转换为'int',我预计它也会将类型'char []'隐含地转换为'int []'.
但是,以下代码返回编译时错误CS0029无法将类型'char []'显式转换为'int []'.
int[][] jaggedArray = new int[][]
{
new[]{'a'},
new[]{1}
};
Run Code Online (Sandbox Code Playgroud)
是否有技术原因导致无法提供此转换?
这就是语言定义的方式.C#可以被定义为从旧的数组中自动创建一个新数组并逐项转换元素.当然,这会创建一个独立的数组.其中一个阵列的突变不会传播到另一个阵列.这让开发人员感到困惑.这可能就是为什么C#不这样做的原因.
在任何情况下int[]都不能被视为a,char[]因为两者具有不兼容的内存布局.对位的重新解释不足以执行转换.
这个问题与锯齿状数组无关.可以使用两个类型int[]和变量完全捕获此问题char[].这使问题更容易理解.