gpt4 book ai didi

C# 使用新[]

转载 作者:太空狗 更新时间:2023-10-29 19:48:46 24 4
gpt4 key购买 nike

我对使用 new[] 有疑问。

想象一下:

Object.SomeProperty = new[] {"string1", "string2"};

SomeProperty 需要一个字符串数组。

我知道这段代码会起作用。但我想知道它在幕后做了什么。 new[] 是否创建类 object 的实例,并在 SomeProperty 中自动将其转换为 string 对象?

谢谢

最佳答案

好吧,这里还有一点的困惑。

正在进行的推断与 Object.SomeProperty 的类型无关,而是与数组初始值设定项中的表达式类型有关。换句话说,你可以这样做:

object o = new[] { "string1", "string2" };

并且 o 仍然是对字符串数组的引用。

基本上,编译器会像这样查看表达式:

new[] { A, B, C, D, ... }

(其中 A、B、C、D 等是表达式)并尝试计算出要使用的正确数组类型。它仅将 A、B、C 和 D 等类型视为数组元素类型。采用这组候选类型,它试图找到一个所有其他类型都可以隐式转换为的类型。如果没有一个这样的类型,那么编译器会报错。

例如:

new[] { new Form(), new MemoryStream() }

不会编译 - MemoryStreamForm 都不能相互转换。然而:

new[] { GetSomeIDisposable(), new MemoryStream() }

将被视为 IDisposable[],因为存在从 MemoryStreamIDisposable 的隐式转换。同样:

new[] { 0, 1, 3.5 } // double[]
new[] { 1, 3, 100L } // long[]

关于C# 使用新[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/325267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com