Форматирование / отступ для использования операторов (C#)
Когда дело доходит до using
заявления в C# (не путать с using
Директивы, которые импортируют пространства имен), Visual Studio не делает отступ для однострочного кода, который следует, если не используются скобки. Это типично для "вложения" с помощью операторов, как показано в этом вопросе SO.
Меня смущает, что последующие заявления после 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 (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();
}
Простое исправление: всегда используйте явные блоки, даже для отдельных строк. Visual Studio будет правильно делать отступы, и в качестве бонуса ваш код будет более понятным!
Мне нравится, когда меня опускают, когда я ошибаюсь, поэтому я собираюсь ответить на этот вопрос...
Вот как я бы отформатировал это:
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);
Совет профессионала: отрицательное голосование не является контраргументом, поэтому, если у вас его нет, вам не следует голосовать.
Как мой инструктор по С сказал мне более 10 лет назад: всегда, всегда, всегда используйте скобки. Хорошие шансы, что кто-то придет (возможно, даже вы) и добавит другую строку кода, а потом удивится, почему он ведет себя неправильно.