如何在Visual Basic .NET中指定长字符串文字?

6
有没有一种方便的方法在Visual Basic源代码中存储长字符串? 我正在编写一个控制台应用程序,--help的输出大约有20行。
最好能够在源代码中的原始文本区域中管理输出文本1:1。许多语言都提供了HEREDOC功能。在VB中,我找不到它。但也许可以通过LINQ(XML)来欺骗它?
提前感谢您的好建议!
3个回答

13

更新:

在带有Visual Studio 2015的VB.NET 14中,所有字符串字面量都支持多行。在VB.NET 14中,所有字符串字面量的工作方式类似于C#中的verbatim字符串字面量。例如:

Dim longString = "line 1
line 2
line 3"
@符号(称为逐字字符串)可以很方便地编写多行字符串,但不幸的是VB.NET没有直接等效的功能(这已经不再正确,请参阅上面的更新)。然而,还有其他几个选项可能仍然对您有所帮助。

选项1:简单连接

Dim longString As String =
    "line 1" & Environment.NewLine &
    "line 2" & Environment.NewLine &
    "line 3"

或者不那么.NET纯粹主义者可能会选择:

Dim longString As String =
    "line 1" & vbCrLf &
    "line 2" & vbCrLf &
    "line 3"

选项 2: 字符串生成器

Dim builder As New StringBuilder()
builder.AppendLine("line 1")
builder.AppendLine("line 2")
builder.AppendLine("line 3")
Dim longString As String = builder.ToString()

Option 3: XML

Dim longString As String = <x>line 1
line 2
line 3</x>.Value

选项4:数组

Dim longString As String = String.Join(Environment.NewLine, {
    "line 1",
    "line 2",
    "line 3"})

其他选项

您可能还想考虑其他替代方案。例如,如果您确实希望它成为代码中的文字,您可以在小型c#字符串字面值库中使用@语法。或者,您可能会决定将其保存为字符串资源,而不是作为字面值存储,这也是可以接受的。或者,您还可以选择将字符串存储在外部数据文件中,并在运行时加载它。


1
VB现在将在这些情况下推断行连续。 - peterG
1
@Westie 正如peterG所说,在大多数情况下,你不再需要它们了。只要清楚表明你正在编写一条语句,它就能自动推断该语句在下一行继续。仍然包含换行符号并没有坏处,这样更加明确,但是不必让它们混乱你的代码也很好 :) - Steven Doggart
1
@Westie 更重要的是(但广为人知的是),自Visual Studio 2010 SP1以来,您可以在方法声明中省略ByVal关键字。 - sloth
1
@Westie - 为了使隐式行连续性更加清晰,这篇文章涵盖了所有情况 - 请滚动到隐式行连续部分。 - miroxlav
1
刚刚阅读了VB.NET 14的链接,我只能说“是的,天哪,是的”。感谢更新。 - вʀaᴎᴅᴏƞ вєнᴎєƞ
显示剩余7条评论

4
您也可以简单地使用文本资源(Project -> Properties -> Resources),并通过My.Resources.NameOfTheResource在您的代码中访问它们。此方法可使您的程序更加灵活和易于维护。

感谢您添加了这个选项,以便更全面地涵盖这个问题。在我的情况下,我更喜欢将文本“直接插入源代码文件”中所述,但在此提及资源仍然对参考有好处。 - miroxlav
@miroxlav 我更喜欢将文本直接插入源代码文件中:那么我建议使用XML文字,因为在我看来这是最不笨重的方法。 - sloth

1
在VB.net中,您可以简单地在字符串文字的末尾写上"& _",以获得多行字符串。

这不会使字符串变成多行 - 它只会使字面量变成多行。 - Steven Doggart
@MansoorShaikh - vbCrLf 就是这样(即一个字符串常量 CR 和 LF),并且是从旧的 VB6 传承下来的,而 NewLine 则更加平台无关(简单来说)。 - user1945782

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接