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