3

私は次のコード ブロックを実行していますが、コンパイラは割り当てられていないローカル変数について不平を言っています。

while (rsData.Read())
{
    if (rsData["TYPE"] != DBNull.Value)
        strType = rsData["TYPE"].ToString().Trim();


    if (strType == "01")
    {
        if (rsData["Text"] != DBNull.Value)
            strwho = rsData["Text"].ToString();

        if ((strwho.Length < 10 || (strwho.IndexOf("NULL") > 1)))
            strwho = "";
    }
    else if (strType == "07")
    {
        if (rsData["Text"] != DBNull.Value)
            strmetades = rsData["Text"].ToString();

        if ((strmetades.Length < 10 || (strmetades.IndexOf("NULL") > 1)))
            strmetades = "";
    }

「if (strType == "01")」のすべての行で問題が発生し、何が起きているのかわかりません。これにスイッチを使用することを考えましたが、同じ問題が発生するようです。

何か案は?

4

6 に答える 6

16

文字列 strType を宣言するときは、次のような値を割り当てる必要があります

string strType = null;

詳細:コンパイラ エラー CS0165

于 2012-05-04T13:20:57.440 に答える
2

これは、変数を使用する前strTypeに変数を値に割り当てていないためです。C# コンパイラの規則に従って、変数を何らかの方法で使用する前に、変数を任意の値に割り当てる必要があります。

つまり、条件の前に空の文字列を割り当てるだけで十分です。たとえば、たわごとのように:

strType = srting.Empty; //at least one value is already assigned!

while (rsData.Read())
{
    .... //your code here
}

これはなぜですか?あいまいさを避け、コードの表示を明確にしないため。

これについて詳しくは、Eric Lippert の小さな記事を直接読んでください。

于 2012-05-04T13:26:46.340 に答える
0

このエラーは、以前にその変数を宣言していないことを意味します。while ループの先頭でこれらの変数を初期化するだけです。

例:

while (rsData.Read())
{
    string strType = string.Empty;
    string strwho = string.Empty; // Do this if you have the same error for strwho
    string strmetades = string.Empty; // Do this if you have the same error for strmetades

    // Your other code comes here
}

IF ステートメントの順序を少し変えると、空の値が変数に再割り当てされるのを回避することもできます。

于 2012-05-04T13:23:07.993 に答える
0

良いことに、String.Empty を使用してください。

string strType=String.Empty;
于 2012-05-04T13:33:19.023 に答える
0

使用する前に、ローカル変数に何らかの値を割り当てる必要があります。宣言した場所 (while ブロックの前) で初期化できます。

var strType = ""; // or null

または (strType に前の反復からの値を記憶させたくない場合)、リーダーにデータが含まれている場合、または DbNull がある場合の両方で初期値を取得するようにしてください。

strType = rsData["TYPE"] == DBNull.Value ? "" : rsData["TYPE"].ToString().Trim();
于 2012-05-04T13:21:03.983 に答える
0

Ifステートメントの時点で変数に値がないため、不平を言います。

ただするstring strType = "";

于 2012-05-04T13:21:38.997 に答える