質問

初期化なしで、配列に値を割り当てる方法を教えてください

string[] s={"all","in","all"};

I mean why did not the compile show error?.Normally we need to 
initialize ,before assign values.
役に立ちましたか?

解決

これは単なる構文上の砂糖です。

これ:

string[] s = {"all","in","all"};

は次と同じコードにコンパイルされます:

string[] tmp = new string[3];
tmp[0] = "all";
tmp[1] = "in";
tmp[2] = "all";
string[] s = tmp;

すべての要素が割り当てられるまで、配列参照は s に割り当てられないことに注意してください。これは new 変数を宣言するこの特定のケースでは重要ではありませんが、この状況では異なるものになります。

string[] s = { "first", "second" };
s = new string[] { s[1], s[0] };

オブジェクトおよびコレクションの初期化子についても同様です-変数は最後にのみ割り当てられます。

他のヒント

初期化せずに配列変数を宣言することは可能です。

これをチェックしてください http://msdn.microsoft.com/en- us / library / 0a7fscd0%28VS.71%29.aspx

「配列に値を割り当て」ていません。タイプ「変数への参照」の変数を初期化しています。初期化に使用する値は、短い配列初期化構文 {...} を使用して作成された配列への参照です。配列型の変数の初期化子でのみ許可されますが、 T は変数の型から推定される new T [] {...} とまったく同じです。 。

理由を知りたいと思う

 string[] s={"all","in","all"};

このように最初に配列を初期化する必要があると予想される場合に動作します:

string[] s = new string[];

または

string[] s = new string[] {"all","in","all"};

答えは単なるコンパイラの魔法です。コンパイラーは、初期化に基づいて配列をどのくらい大きくするかを知っているので、ユーザーの背後でそれを行うだけです。 var キーワードと同様に、入力する必要がある冗長な情報の量を制限することがポイントです。

{" all"、" in"、" all"} の部分は初期化です。 new string [] の部分は省略できます。これは、中括弧と文字列が略記法であるためです。単一次元配列の MSDN をご覧ください。

string[] s = new string[] { "all","in","all"};

およびその短縮版

string[] s = {"all","in","all"};

同じものです。詳細については、 MSDN (配列の初期化セクション)を参照してください。詳細。

C#3以降では新しいstring []部分は必要ありません-これは正常に動作します

string[] s = { "all","in","all"};

コンパイラが少し賢くなり、あなたの言っていることを解決しているだけです-バックエンドILは同じです。

許可されているという理由だけでそうすることができますが、2つのステップで行う必要はないので、これは略記です。砂糖と考えてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top