3

当我需要代码模板时,我可以使用 Python,如下所示。

templateString = """
%s 
%s
%s
"""

print templateString % ("a","b","c")

如何用 C# 实现等价物?

我试过了

using System;

class DoFile {

    static void Main(string[] args) {
        string templateString = "
        {0}
        {1}
        {2}
        ";
        Console.WriteLine(templateString, "a", "b", "c");
    }
}

但我得到了

dogen.cs(86,0): error CS1010: Newline in constant
dogen.cs(87,0): error CS1010: Newline in constant
dogen.cs(88,0): error CS1010: Newline in constant

当然templateString = "{0}\n{1}\n{2}\n";可以,但是我需要使用多行模板,因为 templateString 用于生成部分代码,而且它真的很长。

4

4 回答 4

3

改为执行此操作(在字符串常量之前添加 @):

class DoFile {

    static void Main(string[] args) {
        string templateString = @"
        {0}
        {1}
        {2}
        ";
        Console.WriteLine(templateString, "a", "b", "c");
    }
}
于 2011-05-13T18:35:12.297 回答
3

您需要在第一个报价@之前放置一个

templateString = @"
        {0}
        {1}
        {2}
        ";

使其成为逐字字符串文字

在逐字字符串文字中,分隔符之间的字符被逐字解释,唯一的例外是引号转义序列。特别是, 简单的转义序列以及十六进制和 Unicode 转义序列*不会在逐字字符串文字中处理*。逐字字符串文字可能跨越多行。

于 2011-05-13T18:35:57.447 回答
0

你可以在变量名前加上@来获取多行字符串。

于 2011-05-13T18:37:16.377 回答
0

您需要将 @ 放在字符串的引号之前,这将使其成为逐字字符串文字,并且仍将使用您使用的所有空格。

于 2011-05-13T19:18:16.517 回答