Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不允许在if括号内使用此字符串?_C#_Visual Studio - Fatal编程技术网

C# 为什么不允许在if括号内使用此字符串?

C# 为什么不允许在if括号内使用此字符串?,c#,visual-studio,C#,Visual Studio,这可能是一个愚蠢的问题,有一个简单的解决方案,但我不明白为什么它不允许我在if括号内使用字符串“datatxt”。它说,“名称‘datatxt’在当前上下文中不存在”。欢迎任何帮助 try { StreamReader sr = new StreamReader("Data.txt"); String datatxt = sr.ReadLine(); } catch (Ex

这可能是一个愚蠢的问题,有一个简单的解决方案,但我不明白为什么它不允许我在if括号内使用字符串“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(); 

变量
datatxt
try
块中声明,因此只能在该块中引用


如果要在
try
块之外使用它,请在
try
之前声明它,因为
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
station放在
try
中,则更有意义,这样在出现异常时就不会发生异常

e、 g


在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(); 
}

您可以保留
字符串dataText

补充阅读:


在C#(或NET)参考中搜索变量范围:在try块中声明的变量不能在其外部使用。谢谢!这很有道理,而且似乎是正确的做法。
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);
}