使用语句的格式/缩进(C#)

时间:2010-09-14 17:29:47

标签: c# formatting using-statement

对于C#中的using语句(不要与导入名称空间的using 指令混淆),Visual Studio不会缩进单行代码如果没有使用大括号,则遵循。这是典型的使用this SO question中显示的语句“嵌套”。

我发现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语句最好被视为单个块,因为它们在技术上是。缺少缩进仅适用于语句是没有大括号的顺序using语句;当一个人习惯了,他们就不再那么寻常了。

一如既往地感谢所有那些为这些小编程细节提供见解和经验的人。

5 个答案:

答案 0 :(得分:24)

正如其他人所说,总是使用牙箍。但是,一个成语有点违背使用“非缩进”:

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

但是我总是在最里面的块中使用大括号:)

答案 1 :(得分:13)

这是偏好。我总是缩进,并将必要的项放在括号中

using(var t = new t())
{
   t.Foo();
}

答案 2 :(得分:5)

轻松修复:始终使用显式块,即使是单行也是如此。然后,Visual Studio将正确缩进,作为奖励,您的代码将更易于维护!

答案 3 :(得分:0)

像我的C教练10多年前告诉我的那样:总是,总是使用牙套。很有可能有人会出现(甚至可能是你),并投入另一行代码,然后想知道为什么它的行为不正确。

答案 4 :(得分: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);

专业提示:downvote不是反驳,所以如果你没有反对,你就不应该投票。