2016-09-14 80 views
4

我发现这个代码new [] {a,b}是什么意思和创建?

Stream foo() 
{ 
    ... 
    return new MemoryStream(new[] { a, b }); 
} 

,可以猜测它做什么,却找不到一个解释,为什么类型定义byte[]可以省略。 我看着msdn c#new解释,但那里太简单了。

+1

摘自它创建包含两个字节的'MemoryStream'实例:'A'和'B' –

+4

类型阵列的可以从它们是两个字节的参数中导出的,所以数组是一个'Byte []'。这是[隐式类型数组](https://msdn.microsoft.com/en-us/library/bb384090.aspx) –

+2

http://stackoverflow.com/questions/5678216/all-possible-c-sharp-数组初始化语法 –

回答

1

我能猜出它

你是正确的,这是一样的new byte[] { a, b }

我无法找到一个解释,为什么类型定义byte[]可以省略

可以省略的原因是ab类型为byte。编译器足够聪明,可以发现你打算创建一个数组byte,所以它不要求你明确指定类型。

微软解释了这个快捷方式here。这个想法类似于省略使用var的声明中的类型,实际类型可以从初始化上下文中推断出来。

2

类型定义可以省略,因为它可以从列表中的对象类型推断出来。

C#编译器在编译代码时会执行大量的工作,以检查您编写的内容是否有效并将按照您的意图执行。你仍然可以犯错误,但是(希望)比c或C++等语言更少。