.net 多行字符串变量

dojqjjoe  于 2022-12-20  发布在  .NET
关注(0)|答案(6)|浏览(479)

在.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 & _
"                                    |___/       ")
vsaztqbk

vsaztqbk1#

您(最初)将其标记为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

Update for Visual Studio 2015: Obviously vb.net was the difficult case here, but as of VS2015 it supports multi-line strings in a fashion similar to c# verbatim strings, but without the preceding @ .
注意,嵌入字符串的行结束符实际上是由您选择的编辑器提供的行结束符。对于VS,这是\r\n
示例:

源代码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}"
23c0lvtd

23c0lvtd2#

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

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

fbcarpbf3#

使用逐字字符串。
@符号告诉字符串构造函数忽略换行符。
更多信息请参见MSDN。字符串文字与逐字字符串
例如

string verbatim = @"v
                    e
                    r
                    batim"

你的例子

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

Console.WriteLine(Logo)
ggazkfy8

ggazkfy84#

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

string t = @"t
e
s
t"
ej83mcc0

ej83mcc05#

有点...
它是这样做的:

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

等等。

s4n0splo

s4n0splo6#

C#11和. NET 7版本,带有原始字符串文字:

string multilineLogo = """
__   __                 _                       
\ \ / /                | |                      
 \ V /___  _   _ _ __  | |     ___   __ _  ___  
  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ 
  | | (_) | |_| | |    | |___| (_) | (_| | (_) |
  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ 
                                     __/ |      
                                    |___/       
""";
Dim MultilineLogo = """
__   __                 _                       
\ \ / /                | |                      
 \ V /___  _   _ _ __  | |     ___   __ _  ___  
  \ // _ \| | | | '__| | |    / _ \ / _` |/ _ \ 
  | | (_) | |_| | |    | |___| (_) | (_| | (_) |
  \_/\___/ \__,_|_|    \_____/\___/ \__, |\___/ 
                                     __/ |      
                                    |___/       
""";

相关问题