web-dev-qa-db-ja.com

new [] {a、b}はどういう意味で、作成しますか?

このコードを見つけました

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

何をするのか推測できますが、型定義byte[]を省略できる理由の説明が見つかりません。 msdn c# new の説明を見ましたが、それは単純すぎます。

10
datafiddler

配列初期化子で指定された要素から配列インスタンスの型が推測される、暗黙的に型指定された配列を作成できます。暗黙的に型指定された変数の規則は、暗黙的に型指定された配列にも適用されます。

https://msdn.Microsoft.com/en-us/library/bb384090.aspx から取得

9
ThePerplexedOne

私はそれが何をするのか推測できます

そうです、それはnew byte[] { a, b }と同じです

型定義byte[]を省略できる理由の説明が見つかりません

省略できる理由は、abの両方がタイプbyteであるためです。コンパイラは、bytesの配列を作成するつもりであると理解できるほど賢いので、型を明示的に指定するように求められることはありません。

Microsoftはこのショートカットを説明しています ここ 。この考え方は、初期化コンテキストから実際の型を推測できる場合に、varを使用する宣言で型を省略することに似ています。

4
dasblinkenlight

タイプ定義は、リスト内のオブジェクトのタイプから推測できるため、省略できます。

C#コンパイラは、コンパイル時にコードを分析して多くの作業を行い、記述した内容が有効であり、意図したとおりに実行されることを確認します。それでも間違いを犯す可能性はありますが、(うまくいけば)cやC++などの言語よりも少なくなります。

2
ChrisF

これで、基本的にオブジェクトの配列を暗黙的に作成します!

0
a_m_dev