使用未赋值的局部变量 - if 语句



我正在做以下代码块,编译器抱怨未分配的局部变量,可以使用一些帮助来识别发生了什么。

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")"行,我不确定发生了什么。我想过为此使用开关,但这似乎也遇到了同样的问题。

有什么想法吗?

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

string strType = null;

更多详细信息:编译器错误 CS0165

这样做的原因是,在使用变量之前,您不会strType变量分配给任何值。 根据 C# 编译器规则,必须先将变量分配给任何值,然后才能开始以任何方式使用它。

换句话说,应该足够了,在条件之前分配一个空字符串,例如狗屎:

strType = srting.Empty; //at least one value is already assigned!
while (rsData.Read())
{
    .... //your code here
}

为什么会这样?避免歧义和不清晰的代码呈现。

更多关于这一点,请仔细阅读 Eric Lippert 的一篇小文章:为什么局部变量肯定是在无法访问的语句中分配的?

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

只是做string strType = "";

在使用局部变量之前,您应该为局部变量分配一些值。您可以在声明它的位置(在 while 块之前)初始化它:

var strType = ""; // or null

或者(如果您不希望 strType 记住它上次迭代的值),请确保它在读取器包含数据或存在 DbNull 时获得初始值

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

此错误表示您之前未声明该变量。只需在 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 语句的排序略有不同,甚至可以避免将空值重新分配给变量。

很好,使用String.Empty;

string strType=String.Empty;

相关内容

  • 没有找到相关文章

最新更新