为什么我不能在Using块中使用局部变量?

时间:2016-02-24 15:36:36

标签: c#

我还在学习C#的详细信息,所以请原谅我,如果这个基本的话。我一直在寻找答案,但没有找到答案。

我已经声明了局部变量(在我的函数中):

f(x) + n

我一直收到错误,"使用未分配的局部变量"当我试图归还它时:

string myVar;

我在这里做错了什么?

return (myVar);

4 个答案:

答案 0 :(得分:8)

这与using语句无关,而与while循环有关。抛开其他所有东西,这就是问题,实质上是:

string myVar;
while (someNonConstantCondition)
{
    myVar = someValue;
}
return myVar;

编译器说while循环体可能永远不会执行,因为条件可能是假的。

我建议将代码更改为:

if (reader.Read())
{
    return reader.GetString("column1").Trim();
}

...并使用using语句确保所有命令等都自动处理。 (您已经收到了usingconn.Close()条,因此您可以移除对conn.Dispose()cmd.Dispose()reader.Read()的来电。)

请注意,这只会从结果中读取第一个行,而您当前正在从 last 行返回该值。如果这对您很重要,可能会有更大的设计问题。

接下来,您需要考虑如果false返回$('#chhk').on('click',function(e) { e.preventDefault(); alert('click'); var table = $("#tbl tbody"); table.find('tr').each(function (i, el) { var $tds = $(this).find('td'), product = $tds.eq(2).text(), price = $tds.eq(3).text(), total = $tds.eq(5).text(); var qty = $(this).find('td input:first').val(); alert('Row ' + (i + 1) + ':\nProduct: ' + product + '\nPrice: ' + price + '\nTotal: ' + total +'\n Qua:' + qty); }); }); 会发生什么......您想要抛出异常吗?还有别的吗?通过将return语句直接放在您已设法读取某些数据的位置,如果无法读取某些数据会发生什么事情的问题更清楚,IMO。

答案 1 :(得分:7)

修复错误更改 -

string myVar = string.Empty;

问题出在这里

while (reader.Read())
{
    myVar= reader.GetString("column1").Trim();
}

此部分可能无法运行且myVar可能永远不会被分配,因此错误。

答案 2 :(得分:3)

编译器不是"确定" myVar是否会在循环中获得值。初始化变量:

string myVar = "";

答案 3 :(得分:1)

如果没有数据要读取,myVar将没有任何值,

1)在阻止之前设置一个值,

myVar = string.Empty;

或更好 2)在声明变量

的地方分配初始值
string myVar = string.Empty;