为什么我不允许在if-bracket中使用这个字符串?

时间:2016-03-23 18:38:13

标签: c# visual-studio

这可能是一个简单的解决方案的愚蠢问题,但我无法弄清楚为什么它不允许我在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(); 

3 个答案:

答案 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)

变量datatxttry块内声明,因此只能在该块中引用。

如果您想在try块的 之外使用它,请在try之前声明它。