行在C#中继续字符
我们有一个包含很长string的variables的unit testing。
问题是如何在代码中编写这些代码,而不存在换行符问题或代码难以阅读。
在VB中有一行继续字符,在C#中有一个equivilant?
C#将允许你有一个string拆分成多行,这个术语被称为verbatim literal
:
string myString = @"this is a test to see how long my string can be and it can be quite long";
如果您正在寻找VB的替代方法,请使用+
join您的行。
string常量
只需使用+
运算符并将string分解为可读的行。 编译器会提取string是不变的,并在编译时连接它们。 请参阅MSDN C#编程指南。
例如
const string myVeryLongString = "This is the opening paragraph of my long string. " + "Which is split over multiple lines to improve code readability, " + "but is in fact, just one long string.";
IL_0003: ldstr "This is the opening paragraph of my long string. Which is split over multiple lines to improve code readability, but is in fact, just one long string."
stringvariables
请注意,使用string插值将值replace为您的string时, $
字符需要在需要进行replace的每行之前:
var interpolatedString = "This line has no substitutions. " + $" This line uses {count} widgets, and " + $" {CountFoos()} foos were found.";
但是,这会对多次调用string.Format
和string的最终串联(用***
标记)产生负面的性能结果,
IL_002E: ldstr "This line has no substitutions. " IL_0033: ldstr " This line uses {0} widgets, and " IL_0038: ldloc.0 // count IL_0039: box System.Int32 IL_003E: call System.String.Format *** IL_0043: ldstr " {0} foos were found." IL_0048: ldloc.1 // CountFoos IL_0049: callvirt System.Func<System.Int32>.Invoke IL_004E: box System.Int32 IL_0053: call System.String.Format *** IL_0058: call System.String.Concat ***
尽pipe你可以使用$@
来提供一个单一的string,并避免性能问题, 除非空格被放在{}
(这看起来很古怪,IMO),这与Neil Knight的答案有相同的问题,因为它将包括任何空格在线故障:
var interpolatedString = $@"When breaking up strings with `@` it introduces <- [newLine and whitespace here!] each time I break the string. <- [More whitespace] {CountFoos()} foos were found.";
注入的空白很容易被发现:
IL_002E: ldstr "When breaking up strings with `@` it introduces <- [newLine and whitespace here!] each time I break the string. <- [More whitespace] {0} foos were found."
另一种方法是恢复到string.Format
。 在这里,根据我的初始答案,格式化string是一个单一的常量:
const string longFormatString = "This is the opening paragraph of my long string with {0} chars. " + "Which is split over multiple lines to improve code readability, " + "but is in fact, just one long string with {1} widgets.";
然后评估如下:
string.Format(longFormatString, longFormatString.Length, CountWidgets());
但是,考虑到格式化string和replace令牌之间的潜在分离,这仍然可能是棘手的。
你可以使用逐字文字:
const string test = @"Test 123 456 ";
但是第一行的缩进是棘手的/丑陋的。
@"string here that is long you mean"
但要小心,因为
@"string here and space before this text means the space is also a part of the string"
它也逃避了string中的东西
@"c:\\folder" // c:\\folder @"c:\folder" // c:\folder "c:\\folder" // c:\folder
有关
- 在C#中,variables名之前的@符号是什么意思?
- MSDNstring参考
您必须使用以下方法之一:
string s = @"loooooooooooooooooooooooong loooooong long long long"; string s = "loooooooooong loooong" + " long long" ;
如果你声明不同的variables,那么使用下面的简单方法
Int salary=2000; String abc="I Love Pakistan"; Double pi=3.14; Console.Writeline=salary+"/n"+abc+"/n"+pi; Console.readkey();