2012-01-11 14 views
7

可能性の重複は:
When do you use code blocks?スコープブロックの利点は?

[OK]を、これは愚かな質問かもしれないと私は何かを明らかに不足しているかもしれないが、私はゆっくりとC#のを学ぶ、これは今しばらくの間、私をしつこい維持しています。

次のコードは明らかにうまくコンパイル:私は{}ブロックはスコーピングのために使用することができることを理解

public void Foo() 
{ 
    { 
     int i = 1; 
     i++; 
    } 

    { 
     int i = 1; 
     i--; 
    } 
} 

。問題はなぜあなたがこれをしたいと思いますか?この機能はどのような問題を解決しますか?

私はコントロールが流れるように「縛られ」たもの、反復を比較したスコープのこれらの種類は、より簡単に見過ごすことができますよう、それはより多くの混乱のコードに追加しないことを除けば、それらを使って見ることができます害はありません、など

+0

ケースステートメントは本当に便利なので、ループの中で「i」のようなものを再利用するとエラーが発生しません。 – Chad

答えて

6

それはあなたの変数宣言が混乱になることができswitch文に有用である(。私はそれが絶対に悪いとは言わないよ、私はちょうどあなたがそれを持っているいくつかの本当に専門的な必要性を必要とすると思う注意してください)

混乱コード:

switch (true) 
{ 
    case true: 
     var msg = "This is true."; 
     var copy = msg; 
     break; 

    case false: 
     msg = "This is false."; 
     copy = msg; 
     break; 
} 

クリアコード:

switch (true) 
{ 
    case true: 
    { 
     var msg = "This is true."; 
     var copy = msg; 
     break; 
    } 

    case false: 
    { 
     var msg = "This is false."; 
     var copy = msg; 
     break; 
    } 
} 
+0

人がブレーカー/ブロックの代わりに改行などを使用するとき、最も楽しく愚かです – abatishchev

+1

ありがとう! LOL私はいつも 'switch'ステートメントを第2の方法で書いているので、それらを使っています。面白いと悲しい部分は、私は実際には "匿名ブロックではない"ケースブロックを使用していたと思って...まだ多くを得た:(... – InBetween

1

これらのような「裸の」スコープブロックの場合、私はあなたに同意する傾向があります。言語設計の観点からは、暗黙の有効範囲ブロックの一般化であり、より重要な条件であると考えています(forwhileif)。例:

+0

私は完全に同意します。これは最初に許可されている理由を尋ねます...この機能にはいくつかの利点があるに違いありません。 – InBetween

+0

@InBetween、逆に、なぜ許可されないのですか?言語は 'foreach(var x in foos)statement'を許します。ここで、' statement'はコード中の法的文です。ここでの声明は何ですか? '{codeblock; } '。私たちは '{codeblock; } 'は法的声明です。ですから、その質問はそれを許す理由ではないかもしれませんが、それを拒否する魅力的な理由は何でしょうか。しかし、私はここで言葉の仕様や他のリソースに対して私のコメントを打つことはありませんので、多分これを言葉の束と考えてください。 –

0

不意に変数を誤って変更しないようにします。 「範囲内」にすることで、値を「偶然に」変更したくないときにのみ行動することができます。

3

スコープの目的で人工ブロックを作成すると、しばしば混乱することがあります。私はそれの必要性を見いださなかった。

知覚が必要な場合は、通常は別の方法でリファクタリングするのが良い方法です。 :