C# フィールド、ローカル変数宣言時の既定(デフォルト)値

2018年12月21日

C#では、初期化、代入がなされていない変数は使用できません。

フィールドの場合

フィールドは宣言だけで、規定値がセットされます。

サンプルコード

[highlight_csharp] 
class Exercise
{
    // フィールドでの宣言は、規定値がセットされる
    static int i;

    static void Main(string[] args)
    {
        Console.WriteLine(i);
    }
}

// 表示
0
[/highlight_csharp]

主な既定値

値の種類既定値
boolfalse
float0.0f
int0
参照型(stringやクラスのインスタンスなど)null

ローカル変数の場合

宣言だけでは、既定値が代入されません。

サンプルコード(1)

[highlight_csharp] 
class Exercise
{
    static void Main(string[] args)
    {
        // 宣言だけでは、規定値が代入されない。
        int i;

        Console.WriteLine(i);
    }
}

// 表示 (エラー)
// Use of unassigned local variable 'I'
// <割り当てられていないローカル変数 'i'の使用>
[/highlight_csharp]

サンプルコード(2)

数値を代入しているi = 1;があるため、大丈夫に見えるパターン
xが1でない場合、iに数値が代入されないため上記と同様にエラーになる。

[highlight_csharp] 
class Exercise
{
    static void Main(string[] args)
    {
        int i;

        int x = 1;
        // xが1でない場合、iに値が代入されない
        if (x == 1)
        {
            i = 1;
        }

        Console.WriteLine(i);
    }
}

// 表示 (エラー)
// Use of unassigned local variable 'I'
// <割り当てられていないローカル変数 'i'の使用>
[/highlight_csharp]

サンプルコード(3)

xが1でない場合でも、iに数値が入るためエラーにはならない。

[highlight_csharp] 
class Exercise
{
    static void Main(string[] args)
    {
        int i;

        int x = 1;
        // xが1でない場合でも、iに値が代入される
        if (x == 1)
        {
            i = 1;
        }
        else
        {
            i = 2;
        }

        Console.WriteLine(i);
    }
}

// 表示 
// 1
[/highlight_csharp]

このようにプログラムを変更することによって、エラーとなるケースがあるため、変数(フィールド含む)は宣言と同時に代入することを推奨します。

https://soft-rime.com/2018/12/11/post-693/

C#,入門

Posted by hidepon