2011-07-28 3 views
54

ブール値(bool)をnullにすることはできません。そして:C#のデフォルトブール値は何ですか?

bool foo; if(foo){} // Use of unassigned local variable 'foo' 

なぜデフォルト値がfalseではないのですか?では、nullでない場合の値は何ですか? 理由は何ですか?

編集1 - デフォルト値は実際にはfalseですが、すべての変数を初期化する必要があります。なぜですか?これは別の質問です)

編集2 - Resharper:private bool foo = false; // Initializing field by default value is redundant ???

+1

http://blogs.msdn.com/b/ericlippert/archive/2009/10/12/absence-of-evidence-is-not-evidence-of-absence.aspx興味があります – AakashM

答えて

59

http://msdn.microsoft.com/en-us/library/83fhsxwc.aspx

C#で初期化されていない変数を使用することは許されないことに注意してください。

bool foo = new bool(); 

fooで

は、デフォルト値を持つことになります。

ブールデフォルトはブールのデフォルト値はfalseある

+0

OK 。どのようにコンパイルエラーを説明することができますか? – JohnJohnGa

+1

残念ながら、C#で初期化されていない変数を使用することはできません。リンクされた記事に見られるように – Destructor

+1

ありがとう!と私は "編集2"を説明する方法: – JohnJohnGa

4

です。デフォルト値の詳細については、this tableを参照してください。あなたがそれをチェックするときに偽でない唯一の理由は、あなたがそれをtrueに初期化/設定することです。

9

デフォルト値は実際にはfalseです。

ローカル変数は使用できませんが、最初に割り当てられていません。

あなたが確認するために、デフォルトのキーワードを使用することができます

bool foo = default(bool); 
if (!foo) { Console.WriteLine("Default is false"); } 
0

は、(デフォルトのキーワードを使用して)これを試してみてください

bool foo = default(bool); if (foo) { } 
0

それは、コンパイラからの防御的プログラミングアプローチとして扱うことができます - 変数がなければなりませんそれが使用される前に割り当てられます。

17

基本的にローカル変数は自動的には初期化されません。したがって、初期化せずにそれらを使用すると、例外が発生します。

  • 静的変数
  • クラスや構造体のインスタンスのインスタンス変数
  • 配列要素

デフォルト値はのとおりです:のみ、以下の変数が自動的にデフォルト値に初期化され

(クラスのデフォルトのコンストラクタに割り当てられます)

  • 参照型の変数のデフォルト値はnullです。整数型の場合
  • は、デフォルト値がcharの0
  • で、デフォルト値がfloatの場合、デフォルト値は、二重の場合は0.0f
  • ある
  • `\のU0000' で、デフォルト値は0.0dであります小数について
  • デフォルト値はブール値について0.0メートル
  • あり、デフォルト値は、列挙型について
  • falseで、デフォルト値は、構造体の種類については0
  • あり、デフォルト値は、によって得られますセ限り、あなたの質問の後の部分はconernedされているようにデフォルト値

にすべての値型のフィールドをめの設定:

  • 自動的にデフォルト値に初期化されていないすべての変数を初期化する必要がある理由がありますコンパイラによって課せられた制限。
  • プライベートbool foo = false;これはクラスのインスタンス変数なので、実際は冗長です。したがって、これはデフォルトコンストラクタでfalseに初期化されます。したがって、これを自分で間違って設定する必要はありません。
+4

完全性のために、[MSDNのデフォルト値テーブル](http://msdn.microsoft.com/en-us/library/vstudio/83fhsxwc.aspx)は、structのデフォルト値型には、「すべての参照型フィールドをnullに設定する」も含まれます。 –

関連する問題