Форматирование / отступ для использования операторов (C#)

когда дело доходит до using операторы в C# (не путать с using директивы импортирует пространства имен), Visual Studio не отступает однострочный код, который следует, Если фигурные скобки не используются. Это типично для" вложенности " с использованием операторов, как показано в это так вопрос.

меня смущает, что последующие заявления после 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();

EDIT:

дальнейшее тестирование показывает, что я был неправ в отношении некоторых действий форматирования VS. Если ввести оператор using:

using (var myResource = SomeIDisposableResource())

...и нажмите enter, курсор выровняется с using. Если следующая строка также является оператором using, она будет продолжать выравниваться. Если это не так, VS отступит после завершения. Таким образом, мой первоначальный вопрос несколько недействителен, потому что мой первый пример не достижим, если вы не переопределите форматирование по умолчанию или не используете IDE, которая этого не делает.

тем не менее, стоит знать, что несколько using операторы лучше всего рассматривать как один блок, потому что они технически являются. Отсутствие отступа применяется только тогда, когда операторы являются последовательными using операторы без фигурных скобок; и как только привыкаешь к этому, они перестают выглядеть так необычный.

как всегда спасибо всем тем, кто ответил за понимание и опыт даже в этих незначительных деталях программирования.

5 ответов


как говорили другие, всегда используйте фигурные скобки. Однако, есть один идиома, которая несколько противоречит этому и использует "без отступа":

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

но я бы всегда использовал фигурные скобки для самого внутреннего блока:)


Это предпочтение. Я всегда отступаю и помещаю необходимые элементы в скобки

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

Easy fix: всегда используйте явные блоки, даже для отдельных строк. Visual Studio будет правильно отступать, и в качестве бонуса ваш код будет более обслуживаемым!


Как мой инструктор C сказал мне более 10 лет назад: всегда, всегда, всегда используйте фигурные скобки. Скорее всего, кто-то придет (возможно, даже вы) и бросит еще одну строку кода, а затем задастся вопросом, почему он ведет себя неправильно.


мне нравится быть пониженным, когда я ошибаюсь, поэтому я собираюсь сделать ответ из этого...

вот как я бы его отформатировал:

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);

Pro tip: downvote не является контраргументом, поэтому, если у вас его нет, ты не должен голосовать.