C# 新的[]{a,b}意味着什么,创造了什么?

C# 新的[]{a,b}意味着什么,创造了什么?,c#,new-operator,C#,New Operator,我找到了这个密码 Stream foo() { ... return new MemoryStream(new[] { a, b }); } 并且可以猜测它的作用,但无法找到可以忽略类型定义byte[]的解释。 我看了msdn c的解释,但那太简单了 我能猜出它的作用 你是对的,它与newbyte[]{a,b} 我找不到可以省略类型定义byte[]的解释 可以省略它的原因是a和b都属于byte类型。编译器足够聪明,可以看出您想要创建一个字节数组s,因此它不会要求您显式指定类型 微软解

我找到了这个密码

Stream foo() 
{
  ...
  return new MemoryStream(new[] { a, b });
}
并且可以猜测它的作用,但无法找到可以忽略类型定义
byte[]
的解释。 我看了msdn c的解释,但那太简单了

我能猜出它的作用

你是对的,它与
newbyte[]{a,b}

我找不到可以省略类型定义
byte[]
的解释

可以省略它的原因是
a
b
都属于
byte
类型。编译器足够聪明,可以看出您想要创建一个
字节数组
s,因此它不会要求您显式指定类型


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

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

C#编译器在编译过程中会对代码进行大量分析,以检查您编写的代码是否有效,并按照您的意愿执行。你仍然可以犯错误,但是(希望)比C或C++的语言少。 您可以创建隐式类型的数组,其中数组实例的类型是从数组初始值设定项中指定的元素推断出来的。任何隐式类型变量的规则也适用于隐式类型数组


中可以看出,基本上你可以隐式地创建一个对象数组

它创建一个
MemoryStream
实例,该实例包含两个字节:
a
b
数组的类型可以从两个都是字节的参数派生,因此数组是
Byte[]
。这是一个示例,您应该包含
a
b
的定义@陶:是的,我应该有。但是我不确定是
MemoryStream
的可能原因还是a和b的实际类型起了主要作用。除了
快捷方式
链接,其他一切对我来说都有意义。