web-dev-qa-db-ja.com

C#の 'var'の値をnullに初期化します

Nullの初期値に変数を割り当て、次のif-_elseブロックにその値を割り当てたいのですが、コンパイラがエラーを出しています。

暗黙的に型指定されたローカル変数は初期化する必要があります。

どうすればこれを達成できますか?

13
Nikhil Chavan

var変数にはまだ型があり、コンパイラエラーメッセージにはこの型が示されています宣言中に確立する必要があります

特定の要求(初期null値の割り当て)は実行できますが、お勧めしません。ここでは利点は提供されず(タイプを指定する必要があるため)、コードが読みにくくなると見なされる可能性があります。

_var x = (String)null;
_

まだ「型推論」されており、次のものと同等です:

_String x = null;
_

コンパイラしないは_var x = null_を受け入れます。これは、オブジェクトとは関係なく、nullをどのタイプとも関連付けないためです。上記のアプローチを使用すると、var x = (Object)nullは「有効」になりますが、有用性には疑問があります。

一般的に、varの型推論を正しく使用できない場合、

  1. 私は変数を明示的に宣言するのが最善の場所にいます。または
  2. 有効な値(確立された型で)が宣言中に割り当てられるようにコードを書き換える必要があります。

2番目のアプローチは、コードをメソッドまたは関数に移動することで実行できます。

34
user2246674

C#の主な利点のvarキーワードは、機能ではなく読みやすさを向上させることです。技術的には、varキーワードは他のロック解除(匿名オブジェクトの使用など)を許可しますが、それはこの質問の範囲外のようです。 varキーワードで宣言されたすべての変数には型があります。たとえば、次のコードは「String」を出力することがわかります。

_var myString = "";
Console.Write(myString.GetType().Name);
_

さらに、上記のコードは次と同等です:

_String myString = "";
Console.Write(myString.GetType().Name);
_

varキーワードは、単にC#の「コンテキストからmyStringの型を把握できるので、型を指定する必要はありません」と言う方法です。

myVariableのタイプを把握するためにC#コンパイラコンテキストを提供しているため、var myVariable = (MyType)nullまたは_MyType myVariable = null_は機能するはずです。

詳細については:

1
Steven Wexler