使用未分配的局部变量 - if语句

时间:2012-05-04 13:19:19

标签: c# unassigned-variable

我正在执行以下代码块,并且编译器抱怨未分配的局部变量,并且可以使用一些帮助来识别代码。

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 = "";
    }

它抱怨所有&#39; if(strType ==&#34; 01&#34;)&#39;线条,我不确定是什么。我已经考虑过使用开关,但这似乎也有同样的问题。

有什么想法吗?

6 个答案:

答案 0 :(得分:12)

在声明字符串strType时,您必须分配一个值,例如

string strType = null;

更多详情:Compiler Error CS0165

答案 1 :(得分:2)

原因是您在使用之前未将strType变量分配给任何。根据C#编译器规则,在您开始以任何方式使用它之前,必须将变量赋值给任何值。

换句话说,应该足够的是在传统之前分配一个空字符串,比如狗屎:

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

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

为什么这样?避免歧义,不清楚代码表示。

更多相关内容,请阅读Eric Lippert撰写的一篇小文章:Why are local variables definitely assigned in unreachable statements?

答案 2 :(得分:0)

在使用本地变量之前,应该为其指定一些值。您可以在声明它的位置(在阻止之前)初始化它:

var strType = ""; // or null

或者(如果你不希望strType记住它在前一次迭代中的值),请确保它在reader包含数据时或者在有DbNull时获得初始值

strType = rsData["TYPE"] == DBNull.Value ? "" : rsData["TYPE"].ToString().Trim();

答案 3 :(得分:0)

它抱怨,因为在If语句时变量没有任何值。

只做string strType = "";

答案 4 :(得分: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语句略有不同,您甚至可以避免将空值重新分配给变量。

答案 5 :(得分:0)

很好,使用String.Empty;

string strType=String.Empty;