2011-08-01 14 views
0
string gr = comboBox1.ValueMember; 
decimal sum = 0M; 
try 
{ 
    decimal rite = Convert.ToDecimal(textBox1.Text); 
    decimal left = Convert.ToDecimal(textBox2.Text); 
} 
catch (Exception) 
{ 
    string swr = "Please enter REAL a number, can be with decimals"; 
    label2.Text = swr; 
} 
switch (gr) 
{ 
    case "X": 

     sum = rite * left; 
     break; 
    case "/": 

     break; 
    case "*": 
     break; 
    case "-": 
     break; 
    default: 

     break; 

} 
answerText.Text = Convert.ToString(sum); 

switch文の外の他の変数を変更する際に問題があります。儀式、左;
コードをコンパイルしようとするたびに、「現在のコンテキストに「名前」が残っていません」というエラーメッセージが表示されます。整数儀で同じことをする。私は変数を宣言し、switch文の中で使用することはできません。

+1

タイトルの前に "C#"を置いて、それがC#であることを示してください。これは、ここではSOのタグを使用しています。 –

+0

片方の綴りは正しくありません:P – Peter

答えて

5

riteとleftは、宣言されているスコープ内、つまりtryブロック内でのみアクセス可能です。

あなたは、例外がスローされた場合は、儀式と左にしたい値かを決定しなければならないので、これは、実際には十分ではありませんが、この

decimal rite = 0m; 
    decimal left = 0m; 
    try 
    { 
     rite = Convert.ToDecimal(textBox1.Text); 
     left = Convert.ToDecimal(textBox2.Text); 
    } 
    catch (Exception) 
    { 
     string swr = "Please enter REAL a number, can be with decimals"; 
     label2.Text = swr; 
    } 

ような何かをする必要があります。

0

riteとleftはtryステートメントの内部にローカルです。あなたはtryステートメントの外側でそれらを宣言し、その中に値を代入する必要があります。

例えば、

string gr = comboBox1.ValueMember; 
    decimal sum = 0M; 
    decimal rite= 0M; 
    decimal left= 0M; 
    try 
    { 
     rite = Convert.ToDecimal(textBox1.Text); 
     left = Convert.ToDecimal(textBox2.Text); 
    } 
    catch (Exception) 
    { 
     string swr = "Please enter REAL a number, can be with decimals"; 
     label2.Text = swr; 
    } 
    switch (gr) 
    { 
     case "X": 

      sum = rite * left; 
      break; 
     case "/": 

      break; 
     case "*": 
      break; 
     case "-": 
      break; 
     default: 

      break; 

    } 
    answerText.Text = Convert.ToString(sum); 
} 
+0

このコードは少し間違っています。 'left'と' right'は 'try'-' catch'の外で使用され、 'switch'に到達するまでには初期化されません。宣言には初期化が必要です。 –

+0

Doh ... now Fixed固定 –

+0

私は、潜在的に計算の残りの部分が起こらないようにキャッチ内にreturn文があるはずだと推測しています。 –

0

はい、あなたは、try/catchブロックの範囲内rite(私はあなたが「右」を意味すると思う...)とleftを宣言しているため。 Convert.ToDecimalへの最初の呼び出しが失敗した場合はどうなりますか?さて、riteは一度も割り当てられておらず、leftは決して宣言されていません。それらをレベルアップさせ、try/catchの外側に宣言する必要があります。 tryブロック内から割り当てを行うだけです。エラーがriteleftはそのcatchハンドラが実行された場合、彼らはされませんこれは、有効であると期待し、後に来るコードとして発生した場合に

それはさておき、あなたは機能を終了する必要があります。

1

leftおよびriteは、tryコードブロック内にのみ存在します。

0

"rite"と "left"の宣言をgrとsumに入れてください。

0

ブロックはtryブロックで宣言されているため、スコープが設定されています。
また、tryブロックに例外がある場合、どちらかと思われるでしょうか? 初期化する必要があります。 (私はあなたがデフォルト値としてゼロで罰金だと仮定。)

それらを動かし

string gr = comboBox1.ValueMember; 
    decimal left = 0M, right = 0M, sum = 0M; // assuming you want zeroes by default 
    try 
    { 
     right = Convert.ToDecimal(textBox1.Text); 
     left = Convert.ToDecimal(textBox2.Text); 
    } 
    catch (Exception) 
    { 
     string swr = "Please enter REAL a number, can be with decimals"; 
     label2.Text = swr; 
    } 
    switch (gr) 
    { 
     case "X": 

      sum = right * left; 
      break; 
     case "/": 

      break; 
     case "*": 
      break; 
     case "-": 
      break; 
     default: 

      break; 

    } 

P.S.を1人のキャラクター(rightの代わりにrite)を保存することは、本当に努力する価値がありません。

0

tryステートメントの外側に存在しないように、tryステートメント内で左右に宣言しています。

 decimal rite; 
     decimal left; 

     try 
     { 
      rite = Convert.ToDecimal(textBox1.Text); 
      left = Convert.ToDecimal(textBox2.Text); 
     } 
     catch (Exception) 
     { 
      string swr = "Please enter REAL a number, can be with decimals"; 
      label2.Text = swr; 
     } 

これは正解です。 呼び出される変数スコープ。

0

左二つの変数の儀式は、tryブロックとスイッチブロックがそれにアクセスすることはできませんだけのためにローカルとして宣言され、

次の2つのブロック

decimal rite=0m; 
decimal left=0m; 
     try 
     { 
      rite = Convert.ToDecimal(textBox1.Text); 
      left = Convert.ToDecimal(textBox2.Text); 
     } 
     catch (Exception) 
     { 
      string swr = "Please enter REAL a number, can be with decimals"; 
      label2.Text = swr; 
     } 
     switch (gr) 
     { 
      case "X": 

       sum = rite * left; 
       break; 
      case "/": 

       break; 
      case "*": 
       break; 
      case "-": 
       break; 
      default: 

       break; 

     } 
0

いずれかの方法でアクセスできるようにそれらを宣言する必要がありますtryブロック内のすべてのロジック(スイッチ)を含めるか、変数宣言をtryブロック外に移動します。

関連する問題