数组类型之间的隐式引用转换
本文关键字:引用 转换 类型 之间 数组 | 更新日期: 2023-09-27 18:28:10
在C#标准中,根据以下规则在数组之间进行隐式转换:
从具有元素类型SE的数组类型S到具有元素类型TE,前提是以下所有条件都成立:
- S和T仅在元素类型上不同。换句话说,S和T具有相同数量的尺寸
但如果我制作:
int[] j = { 1, 2 };
int[] k = { 1 };
k = j;
没有发出编译器错误。也许我不明白这个规则的含义。。。
- SE和TE都是参考类型
但是,在上述示例中,j
和k
的元素类型也是值类型。
- 存在从SE到TE的隐式引用转换
如果我有:
int[] j = { 1, 2 };
short[] k = { 1, 5 };
j = k;
似乎可以存在从CCD_ 3类型的元素到CCD_。发出错误。
真诚地说,我不明白这条规则是怎么运作的!
j
和k
都是同一类型。这两个数组都是一个整数数组,并且都有一个维度。所以数组完全符合规则。
这些是文档中描述的阵列的错误使用:
object[] j; int[] k;
int[,] j; int[] k;
float[] j; int[] k;
此代码的作用是使k
和j
都指向同一个数组{ 1, 2 }
由于k
和j
都是具有相同维数和相同元素类型的数组,因此可以使用以下代码
- 您的数组具有相同的元素类型
- 数组的元素中有值类型
- 你的数组有相同的维度-一
- 多维数组如下:
int[,,]
(三维)
S和T表示数组的类型。在这种情况下,j
和k
都是类型int[]
,因此不存在隐式转换,因为它们是同一类型。
由于它们在元素类型上没有差异,因此它们的尺寸是不相关的。