2016-03-23 7 views
-4

これは単純な解決策では愚かな質問かもしれませんが、if-bracketの中に文字列 "datatxt"を使用できない理由を理解できません。 「現在のコンテキストに「datatxt」という名前が存在しません」というメッセージが表示されます。どんな助けも得られます。if-bracket内でこの文字列を使用できないのはなぜですか?

 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

C#(またはNET)リファレンス変数のスコープについての検索:https://msdn.microsoft.com/en-us/library /aa691132(v=vs.71).aspx – Steve

+0

tryブロックで宣言された変数は、その外側で使用できません。 – Jacobr365

答えて

4

datatxttryステートメントの内部に作成されているためです。 tryステートメントの外側の変数を宣言して、tryステートメント内に代入するだけです。例えばあなたは例外がある場合はそれが起こることはありませんtry内部ifなステートメントを置けば

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

はまた、それははるかに理にかなって。

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); 
    } 
+0

ありがとう!それは感覚をたくさん作り、それを行う正しい方法と思われます。 – Vikinghat

0

変数datatxttryブロック内で宣言されているためだけそのブロックで参照することができます。

あなたがtryブロックの外にそれを使用したい場合は、try前にそれを宣言します。

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

あなたがもう一度変数を使用しようとしている場合は、tryブロックの上String dataText;を残すことができます。

その他の情報:

関連する問題