String.Format参数顺序烦恼

Jam*_*son 7 c# string formatting

真的很烦人C#似乎强迫你明确命名String.Format中每个参数的索引,如果你想在某个地方添加另一个参数,你必须重新索引字符串或将新参数放在最后.

有没有办法让C#自动执行此操作?

例如(我知道这是毫无意义的小贩,这只是一个例子:)

我开始:

String.Format("{0} {1} {1} {2} {3}", a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

如果我想在开头添加一个参数,我可以执行以下操作之一:

String.Format("{4} {0} {1} {1} {2} {3}", a, b, c, d, e)
String.Format("{0} {1} {2} {2} {3} {4}", e, a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

例如,在Delphi中我可以做到相当于:

String.Format("{} {} {} {2} {} {}", e, a, b, c, d)
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 24

好吧,C#中没有任何内容可以自动为您执行此操作.你总是可以编写自己的方法来做到这一点,但坦率地说,我发现它的可读性较差.还有很多事情要做(IMO)来理解你的最后一行比前一行更好.当你击中时,{2}你必须在精神上回溯并用以前的项目替换{3}以跳过{2}等等.

就个人而言,我更喜欢需要更长时间输入的代码,但是读起来很清楚.

  • +1:在最初写作时,可维护性应始终赢得一次性节省. (7认同)
  • +1"计算机程序应该设计为人类阅读并偶然由计算机运行" (5认同)

Spr*_*tty 5

从 Visual Studio 2015 开始,您可以使用Interpolated Strings回避这个问题(它是一个编译器技巧,因此您定位的 .net 框架的哪个版本无关紧要)。

代码看起来像这样

string txt = $"{person.ForeName} is not at home {person.Something}"; 
Run Code Online (Sandbox Code Playgroud)

我认为它使代码更具可读性且不易出错。