加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#使用new []

发布时间:2020-12-15 07:41:17 所属栏目:百科 来源:网络整理
导读:我有一个关于使用new []的问题. 想象一下: Object.SomeProperty = new[] {"string1","string2"}; SomeProperty需要一个字符串数组. 我知道这段代码会起作用.但我想知道它在幕后做了什么. new []是否构成了类对象的实例,而在SomeProperty中,它会自动将其转换
我有一个关于使用new []的问题.

想象一下:

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

SomeProperty需要一个字符串数组.

我知道这段代码会起作用.但我想知道它在幕后做了什么. new []是否构成了类对象的实例,而在SomeProperty中,它会自动将其转换为字符串对象吗?

谢谢

解决方法

好的,这里仍然有点混乱.

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

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

和o仍然是对字符串数组的引用.

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

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

(其中A,D等是表达式)并尝试计算出要使用的正确数组类型.它只考虑A,C和D(等)的类型作为数组元素类型.采用这组候选类型,它试图找到一个可以隐式转换为其他类型的候选类型.如果没有一个这样的类型,那么编译器会抱怨.

例如:

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

不会编译 – MemoryStream和Form都不能转换为另一个.然而:

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

将被视为IDisposable []因为存在从MemoryStream到IDisposable的隐式转换.同样:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读