結論
コメントアウトでif文の行を消すだけで中括弧({})は消さなくてもビルドできるみたいです。(知らなかった)
using System;
namespace QiitaCommentOut
{
internal class Program
{
private static void Main(string[] args)
{
var flg = false;
//if (flg)
{
Console.WriteLine("IF文の中です。");
}
Console.WriteLine("IF文の外です。");
Console.Read();
//出力:
//IF文の中です。
//IF文の外です。
}
}
}
環境
IDE
→VisualStudio 2022
フレームワーク
→.Net FrameWork4.7.2
プロジェクト
→コマンドライン
感想
いままでif文をコメントアウトするときは中括弧まで削除していましたが、中括弧は無視されるみたいなのでif文だけをコメントアウトするだけで問題なくビルドできるみたいです。ただ、インデントが深くなってしまうので私は中括弧もコメントアウトしますかね~。そもそも、バージョン管理しているソースであればコメントアウトせずに行自体を削除しますね。
小ネタ
ということで中括弧は無視されるのでこんなコードを書くこともできますね!
追記
@albireo さんからコメントにて教えていただきました。
正確には「無視される」わけではなく「if (true){ ... }と同じ条件なしのコードブロック」という扱いになります。
何が違うのかというと、ローカル変数のスコープの違いですね。
常に実行されるif(true){ ... }
と同じ扱いのようです。念のため、内部実装がどうなっているのか調べたのですが、調べ方がよくないのか見つかりませんでした。ただ、私もif(true){ ... }
と同じ扱いと考えて問題ないと思います。@albireoさんの引用の通り一番の違いは変数のスコープです。
using System;
namespace QiitaCommentOut
{
internal class Program
{
private static void Main(string[] args)
{
//変数名が同じでも中括弧のお陰でエラーにならない!
{
var scope = "first scope";
Console.WriteLine(scope);
}
{
var scope = "second scope";
Console.WriteLine(scope);
}
Console.Read();
}
}
}
「ひとつのメソッド内によく似た処理が繰り返し出てくるとき、コピペしてもローカル変数名が衝突しない」なんて使い方もしますが、これが重要になるのはラムダ式を使う時でしょうね。
クロージャに取り込む変数を選ぶのに使ったりします。
ひとつのメソッド内によく似た処理が繰り返し出てくるとき、コピペしてもローカル変数名が衝突しない」なんて使い方もしますが、これが重要になるのはラムダ式を使う時でしょうね。
の部分に関して私の中では下記ソースと捉えています。
using System;
namespace QiitaCommentOut
{
internal class Program
{
private static void Main(string[] args)
{
//内容がほぼ同じラムダ式をコピペしても変数名ダブりエラーが発生しない!
Action action1 = () =>
{
var scope = "first scope";
Console.WriteLine(scope);
};
Action action2 = () =>
{
var scope = "second scope";
Console.WriteLine(scope);
};
Console.Read();
}
}
}
クロージャに取り込む変数を選ぶのに使ったりします。
のクロージャ
に関しては初めて聞く単語で調べたのですが取り込む変数を選ぶ
という部分は分かりませんでした。クロージャを使用したソース例は下記と考えます。
using System;
namespace QiitaCommentOut
{
internal class Program
{
private static Func<int, int> Sum(int n)
{
return x => n + x;
}
private static void Main(string[] args)
{
var sum10 = Sum(10);
var sum20 = Sum(20);
Console.WriteLine($"{sum10(100)}");
Console.WriteLine($"{sum20(200)}");
Console.Read();
}
}
}