数组类型之间的隐式引用转换

本文关键字:引用 转换 类型 之间 数组 | 更新日期: 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都是参考类型

但是,在上述示例中,jk的元素类型也是值类型。

  • 存在从SE到TE的隐式引用转换

如果我有:

int[] j = { 1, 2 };
short[] k = { 1, 5 };
j = k;

似乎可以存在从CCD_ 3类型的元素到CCD_。发出错误。

真诚地说,我不明白这条规则是怎么运作的!

数组类型之间的隐式引用转换

jk都是同一类型。这两个数组都是一个整数数组,并且都有一个维度。所以数组完全符合规则。

这些是文档中描述的阵列的错误使用:

object[] j; int[] k;
int[,] j; int[] k;
float[] j; int[] k;

此代码的作用是使kj都指向同一个数组{ 1, 2 }

由于kj都是具有相同维数和相同元素类型的数组,因此可以使用以下代码

指向另一个
  1. 您的数组具有相同的元素类型
  2. 数组的元素中有值类型
  3. 你的数组有相同的维度-一
  4. 多维数组如下:int[,,](三维)

S和T表示数组的类型。在这种情况下,jk都是类型int[],因此不存在隐式转换,因为它们是同一类型。

由于它们在元素类型上没有差异,因此它们的尺寸是不相关的。