« MSDN フォーラムで、 カレンダーコントロールのアイディアを募集中 | トップページ | サマータイム: 業界が対応できるかどうかなんて関係ありませんか、 そうですか »

2008年6月 9日 (月)

[C#] ネストした using 句でも、 ネストを深くしない方法

Microsoft Connect Feedback ID = 349656 より。

ディスカッション欄で Azulean 氏が答えておられるのですが、 using 句はこんな風に書いても OK だったんですね~ f(^^;
# 知りませんでした… orz

using (TextReader tr = new StreamReader("hoge.txt"))
using (TextWriter tw = new StreamWriter("moge.txt"))
{
    string line = tr.ReadLine();
    tw.WriteLine(line);
}

このように書いてから、 Visual Studio の自動フォーマットを掛けても、 インデントは変わりませんでした。 つまり、 using 句を何重にネストさせようとも、 インデントは 1ネスト分で済むわけですね。 (^^;

ちなみに、 C# の言語仕様書を見ると、 こうなってました。

8.13 The using statement
The using statement obtains one or more resources, executes a statement, and then disposes of the resource.
using-statement:
  using ( resource-acquisition ) embedded-statement
resource-acquisition:
  local-variable-declaration
  expression

この定義で、 embedded-statement っていうのは、 ( using 句の中に埋め込まれる ) ひとつのステートメントのことです。
そして、 ステートメントとして using 句を書くことは、 禁止されていません。 つまり、上に示した書き方も OK である、 と。
# 言われてみれば、 あたりまえの気がしてきた。 なんで中括弧が必要だと思い込んでたんだろう? f(^^;


また、 using で使うリソースが同じ型なら、

using (TextReader tr1 = new StreamReader("hoge.txt"), tr2 = new StreamReader("moge.txt"))
{
    string line1 = tr1.ReadLine();
    string line2 = tr2.ReadLine();
}

…っていう記述も OK です。
# …けど、 変数宣言をカンマで並べるの、 禁止~っ! f(^^;

|

« MSDN フォーラムで、 カレンダーコントロールのアイディアを募集中 | トップページ | サマータイム: 業界が対応できるかどうかなんて関係ありませんか、 そうですか »

プログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [C#] ネストした using 句でも、 ネストを深くしない方法:

« MSDN フォーラムで、 カレンダーコントロールのアイディアを募集中 | トップページ | サマータイム: 業界が対応できるかどうかなんて関係ありませんか、 そうですか »