C#jagged array:编译器不能隐式地将类型'char []'转换为'int []'.为什么?

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)

是否有技术原因导致无法提供此转换?

usr*_*usr 5

这就是语言定义的方式.C#可以被定义为从旧的数组中自动创建一个新数组并逐项转换元素.当然,这会创建一个独立的数组.其中一个阵列的突变不会传播到另一个阵列.这让开发人员感到困惑.这可能就是为什么C#不这样做的原因.

在任何情况下int[]都不能被视为a,char[]因为两者具有不兼容的内存布局.对位的重新解释不足以执行转换.

这个问题与锯齿状数组无关.可以使用两个类型int[]和变量完全捕获此问题char[].这使问题更容易理解.