假设您有一个冗长的字符串(> 80个字符),您希望分布在多个源代码行中,但不希望包含任何换行符。
一种选择是连接子串:
string longString = "Lorem ipsum dolor sit amet, consectetur adipisicing" +
" elit, sed do eiusmod tempor incididunt ut labore et dolore magna" +
" aliqua. Ut enim ad minim veniam";
有更好的方法,还是这是最佳选择?
编辑:通过“最佳”,我认为编码人员最容易阅读,编写和编辑。例如,如果确实想要换行,那么很容易看到:
string longString =
@"Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam";
当你不想要换行时,我想知道是否有一些干净的东西。
答案 0 :(得分:52)
我会使用您方法的变体:
string longString =
"Lorem ipsum dolor sit amet, consectetur adipisicing " +
"elit, sed do eiusmod tempor incididunt ut labore et dolore magna " +
"aliqua. Ut enim ad minim veniam.";
这里我在等号后面的行上开始字符串,这样它们都排成一行,我也确保空格出现在行的末尾(同样,为了对齐)。
答案 1 :(得分:30)
如果你想尽可能地保持代码的最小化并且能够轻松地阅读它,我仍然会使用@ literal字符串。如果你的来源很长而且速度更快......
string verbatimLit = @"
__ __
/ `-' \
/_| N |_\ Sometimes
| I | format in code
| N | matters
|_____|
";
然后从1行
中删除字符串中的换行符verbatimLit.Replace(Environment.NewLine, " ");
答案 2 :(得分:11)
您最初的想法可能是在代码中嵌入文字字符串的最简单方法。 C# compiler merges literals concatenated with +
- 所以它基本上等同于一个非常长的字符串。
另一个选择当然是将字符串外部化为配置文件或设置文件。这将使其更容易阅读,更容易更改或本地化。我个人避免将长行文本直接放入应用程序的代码中,除非它们非常静态且不需要本地化 - 内部异常消息文本等。
答案 3 :(得分:7)
对于SQL查询或其他具有自己语法的长字符串,我有时会这样做:
private const string QUERY = @"
SELECT *
FROM Table1 AS T1
INNER JOIN Table2 AS T2 ON T1.ID = T2.T1ID
WHERE T1.VALUE = @P1
GROUP BY T2.OTHERVALUE
";
这使得字符串的格式保持不变。
答案 4 :(得分:1)
在Tj Kellie
回答之后,在C#6.0中,您可以轻松地通过字符串插值执行连接和嵌入各种信息的一条指令,并且尽管在多行上定义了字符串,也没有新行。
涉及所有这些的复杂示例如下所示:
public int? BestTime { get; set; }
public int? WorstTime { get; set; }
public int? AvgTime { get; set; }
public int TimeoutReachedCount { get; set; }
public int AllRunCount { get; set; }
public string Str => $@"
Ran {AllRunCount} times;
Reached timeout {TimeoutReachedCount} times;
Best time = {(BestTime.HasValue ? BestTime.ToString() : "N/A")};
Worst time = {(WorstTime.HasValue ? WorstTime.ToString() : "N/A")};
Average time = {(AvgTime.HasValue ? AvgTime.ToString() :"N/A")};"
.Replace(Environment.NewLine, "");
当然,必须特别注意在行尾添加空格以避免单词合并。
答案 5 :(得分:0)
当发现自己有关如何进行多行字符串的问题时,您最好使用资源文件。
答案 6 :(得分:-3)
您可以使用多个consts,然后将它们组合成一个大字符串:
const string part1 = "part 1";
const string part2 = "part 2";
const string part3 = "part 3";
string bigString = part1 + part2 + part3;
无论如何,编译器会将这些常量“折叠”成一个大字符串,因此与原始代码示例相比,此技术根本没有运行时成本。
这种方法有许多优点: