这可能是一个简单的解决方案的愚蠢问题,但我无法弄清楚为什么它不允许我在if-bracket中使用字符串“datatxt”。它说,“当前上下文中不存在名称'datatxt'”。任何帮助都是适用的。
try
{
StreamReader sr = new StreamReader("Data.txt");
String datatxt = sr.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("An error har occured: '{0}'", ex);
}
if (UserBox.Text.Equals(user) && PassBox.Text.Equals(data + datatxt))
{
Main s = new Main();
s.Show();
this.Hide();
答案 0 :(得分:4)
因为在datatxt
语句中创建了try
。尝试在try
语句之外声明变量,并将其分配到try
语句中。 e.g。
string datatxt;
try
{
StreamReader sr = new StreamReader("Data.txt");
datatxt = sr.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("An error har occured: '{0}'", ex);
}
if (UserBox.Text.Equals(user) && PassBox.Text.Equals(data + datatxt))
{
Main s = new Main();
ss.Show();
this.Hide();
}
如果将if
语句放在try
中,那么将会更有意义,因此如果存在异常,则不会发生这种情况。
e.g。
string datatxt;
try
{
StreamReader sr = new StreamReader("Data.txt");
datatxt = sr.ReadLine();
if (UserBox.Text.Equals(user) && PassBox.Text.Equals(data + datatxt))
{
Main s = new Main();
ss.Show();
this.Hide();
}
}
catch (Exception ex)
{
Console.WriteLine("An error har occured: '{0}'", ex);
}
答案 1 :(得分:3)
在try块中声明的变量只能在try块中使用。如果需要在try块中使用变量集,则必须在try块之外声明它,然后在try块内设置值。你的If子句的放置也没有多大意义。将if块移动到try块并在try中保留dataText
更有意义。我已经包括两种方式。
String dataText;
try
{
StreamReader sr = new StreamReader("Data.txt");
datatxt = sr.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine("An error har occured: '{0}'", ex);
}
if (UserBox.Text.Equals(user) && PassBox.Text.Equals(data + datatxt))
{
Main s = new Main();
s.Show();
this.Hide();
}
或
try
{
StreamReader sr = new StreamReader("Data.txt");
String datatxt = sr.ReadLine();
if (UserBox.Text.Equals(user) && PassBox.Text.Equals(data + datatxt))
{
Main s = new Main();
s.Show();
this.Hide();
}
}
catch (Exception ex)
{
Console.WriteLine("An error har occured: '{0}'", ex);
}
如果要再次使用该变量,可以将String dataText;
保留在try块上方。
补充阅读:
答案 2 :(得分:0)
变量datatxt
在try
块内声明,因此只能在该块中引用。
如果您想在try
块的 之外使用它,请在try
之前声明它。