13

C# のステートメントに関しては(名前空間をインポートするディレクティブusingと混同しないでください)、中かっこが使用されていない場合、Visual Studio は後続の単一行コードをインデントしません。これは、この SO questionに示されているステートメントを使用した「ネスト」の典型です。using

usingステートメントの書式設定とは異なり、その後のステートメントがインデントされていないのは混乱を招きますif

// non-indented using statement
using (var myResource = new SomeIDisposableResource())
myResource.Indent(false);

// indented if statement
if (something == true)
    IndentMe();

インデントしない理由はありますか、それとも単なる好みですか?

// indented using statement, but not the default VS formatting
using (var myResource = new SomeIDisposableResource())
    myResource.Indent();

編集:

さらにテストを行った結果、VS の書式設定動作の一部について、私が間違っていたことが明らかになりました。using ステートメントを入力した場合:

using (var myResource = SomeIDisposableResource())

...Enter キーを押すと、カーソルが に揃いますusing。次の行も using ステートメントである場合は、引き続き整列されます。そうでない場合、VS は完了時にインデントします。したがって、私の最初の例は、デフォルトのフォーマットをオーバーライドするか、それを行わない IDE を使用しない限り、実際には達成できないため、最初の質問はやや無効です。

それでも、複数のusingステートメントは技術的には 1 つのブロックとして扱うのが最善であることを知っておく価値があります。usingインデントの欠如は、ステートメントが中かっこのない連続したステートメントである場合にのみ適用されます。そして慣れてくると、あまり変わっていないように見えなくなります。

いつものように、これらのマイナーなプログラミングの詳細でさえも洞察と経験に答えてくれたすべての人に感謝します.

4

5 に答える 5

25

他の人が言ったように、常にブレースを使用してください。ただし、これに反して「非インデント」使用するイディオムが1 つあります。

using (Resource1 res1 = new Resource1())
using (Resource2 res2 = new Resource2())
using (Resource3 res3 = new Resource3())
{
    // Do stuff with res1, res2 and res3
}

しかし、私は常に最も内側のブロックにブレースを使用します:)

于 2010-09-14T17:36:47.617 に答える
13

好みです。私は常にインデントし、必要な項目を括弧内に配置します

using(var t = new t())
{
   t.Foo();
}
于 2010-09-14T17:31:37.340 に答える
5

簡単な修正: 1 行であっても、常に明示的なブロックを使用します。これにより、Visual Studio が適切にインデントされ、おまけとして、コードがより保守しやすくなります!

于 2010-09-14T17:32:23.813 に答える
0

私のCインストラクターが10年以上前に私に言ったように:常に、常に、常に中かっこを使用してください。誰かが(おそらくあなたでさえ)やって来て、別のコード行を投入し、なぜそれが正しく動作しないのか疑問に思う可能性があります。

于 2010-09-14T18:12:31.943 に答える
0

私は間違っているときに反対票を投じられるのが好きなので、これから答えを出します...

これをフォーマットする方法は次のとおりです。

using (Resource1 res1 = new Resource1())
using (Resource2 res2 = new Resource2())
using (Resource3 res3 = new Resource3())
  DoStuffWithResources(res1, res2, res3);

複数のステートメントに置き換える場合はDoStuffWithResources、中かっこを使用します。しかし、私の編集者は、私が次の間違いを犯すことを防いでいます:

using (Resource1 res1 = new Resource1())
using (Resource2 res2 = new Resource2())
using (Resource3 res3 = new Resource3())
  DoStuffWithResources(res1, res2, res3);
  DoOtherStuffWithResources(res1, res2, res3);

上記を入力しようとすると、すぐに次のようになります。

using (Resource1 res1 = new Resource1())
using (Resource2 res2 = new Resource2())
using (Resource3 res3 = new Resource3())
  DoStuffWithResources(res1, res2, res3);
DoOtherStuffWithResources(res1, res2, res3);

プロのヒント: 反対票は反論ではありません。反対票がない場合は、投票しないでください。

于 2010-09-14T18:33:04.970 に答える