我有一个关于使用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[]