我想知道我是否能得到一只手。有人可以向我解释为什么我的字符串sqrt
在finally
块中未被分配?为什么我必须申报呢?为什么不能在try或catch语句中声明它?它会使编码变得更乏味,更有条理。
private void btnDisplay_Click(object sender, EventArgs e)
{
int number;
string sqrt;
try
{
number = Convert.ToInt32(tbInput.Text);
//Why cant i just have it as "number=COnvert.ToDouble(tbInput.Text)?//
Convert.ToDouble(number);
if (number < 0)
{
throw new NegativeNumberException();
}
sqrt = Math.Sqrt(number).ToString();
}
catch (FormatException error)
{
lbOutput.Items.Add(error.Message);
lbOutput.Items.Add("The input should be a number.");
sqrt = "not able to be calculated";
}
catch (NegativeNumberException neg)
{
lbOutput.Items.Add(neg.Message);
sqrt = "not able to be calculated";
}
finally
{
//Here is where i am having the issue "Unassigned local variable"//
lbOutput.Items.Add("Square Root " + sqrt);
}
}
class NegativeNumberException : Exception
{
public NegativeNumberException()
: base("Number can’t be negative")
{
}
}
}
}
我试图在finally块中实现的是“Square Root”和“sqrt”将显示在列表框中,无论sqrt的值是什么。如果我将sqrt输出到任何其他块中的列表框,它就可以工作(因为它已被声明)。有谁知道我怎么能做到这一点?我打赌它可能也很简单。我并不是说咆哮或任何它只是我在过去12小时内一直在努力,所以我开始感到失败。我真的很感谢大家的帮助。
答案 0 :(得分:4)
如果您的代码中有以下任何一行:
number = Convert.ToInt32(tbInput.Text);
//Why cant i just have it as "number=COnvert.ToDouble(tbInput.Text)?//
Convert.ToDouble(number);
if (number < 0)
{
throw new NegativeNumberException();
}
引发不属于NegativeNumberException
或FormatException
类型的异常,然后由于此声明:
string sqrt;
您的sqrt
变量仍然未分配。
你可以通过声明它来解决这个问题:
string sqrt = null; // or ""
关于你的评论:
为什么我不能把它作为“number = COnvert.ToDouble(tbInput.Text)?”
试试这个:
var number = Double.Parse(tbInput.Text);
答案 1 :(得分:2)
您无法在try
块中声明它,因为局部变量由scope绑定。简而言之,在块中声明的局部变量{}
仅在该块中具有可见性。对于插件,如果您在声明时将sqrt
初始化为""
或string.Empty
会更好。
答案 2 :(得分:0)
更改:
int number;
string sqrt;
更新:
double number = 0.0;
string sqrt = string.Empty;
答案 3 :(得分:0)
尝试在sqrt上分配值。 声明sqrt上的字符串sqrt =“”; //可能不包含任何调用问题的值。
答案 4 :(得分:0)
@Corak,在任何一个块解决问题之前初始化字符串。
我改变了
string sqrt;
到
string sqrt=string.Empty;
答案 5 :(得分:0)
sqrt仅在声明的范围内可用。范围通常由花括号(例如方法体),语句(或者在本例中为try,catch和finally子句)分隔。尝试在if子句中声明变量时会注意到同样的问题,然后尝试在else对应项中使用该变量。如果您有很多这些,并且只在try或catch子句中声明它,则可以选择创建全局变量映射,然后将“sqrt”键分配给每个范围内所需的对象。 / p>