CLR via C# 数组 初始化数组元素

创建数组对象,初始化数组元素。

C# 允许用一个语句做这两件事情:

大括号中的以逗号分隔的数据项称为数组初始化器(array initializer)。每个数据项都可以是一个任意复杂度的表达式;

在多维数组的情况下,则可以是一个嵌套的数组初始化器。

可以利用 C# 的 隐式类型的局部变量功能:

可利用 C# 的隐式类型的数组功能让编译器推断数组元素的类型:

上一行代码中,编译器检查数组中用于初始化数组元素的表达式的类型,并选择所有元素最接近的公共基类来作为数组的类型。在本例中,编译器发现两个string和要给null。由于null可隐式转型为任意引用类型,所以编译器推断应该创建和初始化一个由string引用构成的数组。

如果写一下代码:

就会报错。这是由于两个string和一个int的公共基类是Object,意味着编译器不得不创建Object引用的一个数组,然后对 123 进行装箱,并让最后一个数组元素引用已装箱的、值为 123 的一个 int。C# 团队认为,隐式对数组元素进行装箱是一个代价高昂的操作,所以要在编译时报错。

作为初始化数组时的一个额外的语法奖励,还可以想下面这样写:

赋值操作符(=)右侧只给出了一个初始化器,没有 new ,没有类型,没有 [] 。这个语法可读性很好。

不可以像下面这样:

虽然理论上可以通过编译,但 C# 团队认为编译器在这里会为你做太多的工作。它要推断数组类型,新建数组对象,初始化数组,还要推断局部变量的类型。

“隐式类型的数组”如何与“匿名类型”和“隐式类型的局部变量”组合使用。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值