多行字符串变量

时间:2013-04-19 15:05:01

标签: c# .net vb.net string

在.Net(C#和VB.NET)中如果我有这样的多行文字:

__   __                 _                       
\ \ / /                | |                      
 \ V /___  _   _ _ __  | |     ___   __ _  ___  
  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ 
  | | (_) | |_| | |    | |___| (_) | (_| | (_) |
  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ 
                                     __/ |      
                                    |___/       

我可以像这样设置变量吗?

Dim Logo As String = ("
__   __                 _                       
\ \ / /                | |                      
 \ V /___  _   _ _ __  | |     ___   __ _  ___  
  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ 
  | | (_) | |_| | |    | |___| (_) | (_| | (_) |
  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ 
                                     __/ |      
                                    |___/       ")

Console.WriteLine(Logo)

......而不是其他:

    Console.WriteLine("__   __                                         ")
    Console.WriteLine("\ \ / /                | |                      ")
    Console.WriteLine(" \ V /___  _   _ _ __  | |     ___   __ _  ___  ")
    Console.WriteLine("  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ ")
    Console.WriteLine("  | | (_) | |_| | |    | |___| (_) | (_| | (_) |")
    Console.WriteLine("  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ ")
    Console.WriteLine("                                     __/ |      ")
    Console.WriteLine("                                    |___/       ")

......或其他:

            Dim Logo As String = ( _
"__   __                 _                       " & vbNewLine & _
"\ \ / /                | |                      " & vbNewLine & _
" \ V /___  _   _ _ __  | |     ___   __ _  ___  " & vbNewLine & _
"  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ " & vbNewLine & _
"  | | (_) | |_| | |    | |___| (_) | (_| | (_) |" & vbNewLine & _
"  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ " & vbNewLine & _
"                                     __/ |      " & vbNewLine & _
"                                    |___/       ")

5 个答案:

答案 0 :(得分:52)

您(最初)将此标记为c#,但显示VB代码。对于c#:使用@说明符:

string myText =
@"line 1
line 2
line 3"

请注意,如果您不希望字符串开头有空行,请确保将@"放在与文字第一行相同的行上,就像我上面所做的那样。

对于VB.NET,没有直接的支持,但你可以使用this answer中的好的黑客来解决它:

Dim s As String = <a>line 1
line 2
line 3</a>.Value

还考虑创建一个字符串资源;你可以在那里添加换行符(确保按照this answer中的注释使用shift-enter),然后使用类似于

的内容加载资源
Dim myString As String = My.Resources.MyString

Visual Studio 2015的更新:显然vb.net在这里很难用,但从VS2015开始,它支持多行字符串,类似于c#逐字字符串,但没有前面的@

请注意,字符串中嵌入的行终止符是您选择的编辑器提供的实际行终止符。对于VS,这是\r\n

示例:

enter image description here

来源here

对于VS2015 / C#6中引入的新interpolated strings,在C#中使用$@作为字符串的前缀:

string multiline = $@"
[configuration]
name=Fred
age={age}";

在VB.NET中,只需忽略@

Dim multiline As String = $"
[configuration]
name=Fred
age={age}"

答案 1 :(得分:16)

在C#中,您可以使用原始字符串(@),如下所示:

        private string Logo = @"
__   __                 _                       
\ \ / /                | |                      
 \ V /___  _   _ _ __  | |     ___   __ _  ___  
  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ 
  | | (_) | |_| | |    | |___| (_) | (_| | (_) |
  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ 
                                     __/ |      
                                    |___/       ";

答案 2 :(得分:11)

使用逐字字符串。

@符号告诉字符串构造函数忽略换行符。

有关详细信息,请参阅MSDN。字符串文字与逐字字符串

例如

string verbatim = @"v
                    e
                    r
                    batim"

你的例子

Dim Logo As String = (@"
__   __                 _                       
\ \ / /                | |                      
 \ V /___  _   _ _ __  | |     ___   __ _  ___  
  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ 
  | | (_) | |_| | |    | |___| (_) | (_| | (_) |
  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ 
                                     __/ |      
                                    |___/       ")

Console.WriteLine(Logo)

答案 3 :(得分:4)

是的,您应该使用@符号:

string t = @"t
e
s
t"

答案 4 :(得分:1)

有点......

这样做:

Dim logo = " " & vbCrLf & _
"__   __                                         " & vbCrLf & _
"\ \ / /                | |                      " & vbCrLf & _