0

次のように、デバイス タイプの int 値を返す関数を 1 つ作成しました。

public int getDeviceType(string device)
    {
        int temp;
        if (device.ToLower() == "android")
        {
            temp = 1;
        }
        else if (device.ToLower() == "ios")
        {
            temp = 2;
        }
        return temp;

    }

そして、デバイスのタイプを返したかったのです。

しかし、それは私にエラーを与えます

 "Use of unassigned variable temp"

どうすれば解決できますか?

ありがとう。

4

4 に答える 4

4

以下のようにデフォルト値でtempを初期化するだけです

public int getDeviceType(string device)
{
    int temp = 0;
    if (device.ToLower() == "android")
    {
        temp = 1;
    }
    else if (device.ToLower() == "ios")
    {
        temp = 2;
    }
    return temp;

}
于 2012-05-17T09:15:44.817 に答える
1

どのケースにも当てはまらない場合、temp のどの値が返されるかを初期化tempします。0

intデフォルト値は知っていますが0、それでもこれらの場合は初期化する必要があります。それまでは実行されません。

于 2012-05-17T09:17:23.500 に答える
0

整数変数のデフォルト値が 0 の場合のこの動作の根本原因分析と、初期化が必要な理由。

ローカル変数の場合、コンパイラーはフローの良いアイデアを持っています。変数の「読み取り」と変数の「書き込み」を確認し、(ほとんどの場合) 最初の書き込みが最初の読み取りの前に発生することを証明できます。 .

これは、インスタンス変数には当てはまりません。単純なプロパティを考えてみましょう。誰かがそれを取得する前に設定するかどうかをどうやって知るのでしょうか? したがって、すべてのフィールドがコンストラクターで設定されていることを確認するか、デフォルト値を持つことを許可する必要があります。C# チームは後者の戦略を選択しました。

于 2012-05-17T09:20:57.777 に答える
0

基本的に、コンパイラは、すべての変数を確実に初期化することを望んでいます。ローカルとインスタンスの両方。したがって、理論上は、常にすべての変数を初期化する必要があります。

ただし、コンパイラはインスタンス変数が最初に読み取られる前に初期化されているかどうかを判断できないため、コンパイラはすべてのインスタンス変数を暗黙的にデフォルト値に初期化します。

したがって、例外は、ローカル変数が自動的に初期化されないことではなく、インスタンス変数自動的に初期化されることです。

于 2012-05-17T11:36:17.277 に答える