我正在执行以下代码块,并且编译器抱怨未分配的局部变量,并且可以使用一些帮助来识别代码。
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;线条,我不确定是什么。我已经考虑过使用开关,但这似乎也有同样的问题。
有什么想法吗?
答案 0 :(得分:12)
答案 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;