Automatic indentation of arguments list on multipl

2020-07-06 03:21发布

问题:

When the list of arguments to a method grows to the point where they do not fit comfortably on one line, I like to format code such that each argument is on a separate line (following StyleCop suggestion), like this:

public void MyMethod(
   int someArgument,
   double someOtherArgument,
   int someMoreArguments)

The problem I run into is that this formatting is "fragile" and does not get automatically re-formatted when using Ctrl+K+D. For instance, if I happen to insert some spaces in front of one of the arguments, it doesn't get removed, and I end up doing some tedious manual reformatting. If I copy a method (say, to provide an overloaded signature), the argument indentation in the copy gets totally messy.
I have a similar issue with LINQ statements, which I also like to format on multiple lines, like:

myEnumerable.
   .Where(this and that)
   .Where(this and that)
   .FirstOrDefault();

I realize this is complete Obsessive-Compulsive formatting, and a very minor issue, but is there a way to make Visual Studio 2010 automatically re-indent multi-line arguments following that pattern when it gets misaligned?

回答1:

You may want to look at Resharper from JetBrains. It has all sorts of rules that can be applied to formatting code that is much better that the built-in VS stuff.

http://www.jetbrains.com/resharper/

This particular option is located at:

Update

Resharper > Options > C# >Formatting Style > Line Breaks and Wrapping > Wrap long lines

I don't know if it does exactly what you want, but it does wrap long lines



回答2:

For anyone searching this problem for later versions, in visual studio 2017 I found an option to do this. (not sure if it is available in other versions) Under tools->options->Text editor->C/C++->Formatting->Indentation->"Within parentheses, align new lines when I type them"
Choose the option "Align contents to opening parentheses.