VB中的预格式文本 - 在VB中,C#的@等价物是什么?

8

这可能非常明显,我可能有点迟钝。在C#中,我可以这样做:

string = @"this is 
            some preformatted 
            text";

我该如何在VB中实现这个功能?

6个回答

14

这没有。

在C#中,你可以像这样做:"This ends in a new line\n.",但在VB中没有这个概念,你有预定义的变量来处理换行符,如"This ends in a new line" & vbNewLine。

因此,在VB中没有字符串字面量(@"something\n"),因为它会被字面解释。

VB .NET的问题是语句在行末被视为终止,所以你不能这样做。

Dim _someString as String = "Look at me
  I've wrapped my string
    on multiple lines"
你必须在每一行结束字符串并使用下划线表示你想继续语句,这将导致你需要做类似于以下的事情:
Dim _someString as String = "Look at me " & vbNewLine &_
   "*** add indentation here *** I've wrapped my string " & vbNewLine &_
   vbTab & " on multiple lines" '<- alternate way to indent

2
这增加了我认为VB糟糕的理由清单。 - Micah
1
@Micah 字符串字面量有用吗?我是VB开发人员,从来没有觉得自己会从那个特性中获益。然而,对于一些C#的其他特征,比如自动属性,我就不能这么说了... - Meta-Knight
它们可以。我个人在C++和Java的世界中“成长”,所以字符串字面值对我来说非常自然。在字符串字面值中,有些事情比VB等效方法更容易(例如垂直制表符)。这是一个关于C#字符串字面值的附录链接:http://en.csharp-online.net/Appendix_B._CSharp_String_Literals - Joseph
然而,您可以将VB环境设置为自动换行,这样您就不必到处添加下划线了。 - MartW

4
像其他人说的一样,没有@运算符,所以如果你涉及到大量的字符串操作,请使用String.Format。
在我看来,这个
Dim text As String = String.Format("this is {0} some preformatted {0} text", Environment.Newline)

这比这个更易读

Dim text As String = "this is" & Environment.NewLine _
                 & " some preformatted" & Environment.NewLine _
                 & " text"

3

我认为您无法在VB中完成此操作。您需要执行以下操作:

Dim text As String = "this is" & Environment.NewLine _
                     & " some preformatted" & Environment.NewLine _
                     & " text"

编辑:根据评论建议,用Environment.NewLine替换了VB特定的vbNewLine。


2
environment.newline 也是可用的。 - Pondidum
Emvironment.NewLine 在两种语言中都可以正常工作,但大多数编码标准会引导您使用特定于语言的实现。对于其他类似 Int32、Int63 等的内容也是如此。只是提供一个提示,实际上没有任何增值效果。 - STW

2
实际上,你可以在vb.net中做到这一点。你需要使用一个叫做XML Literals的东西。
Dim mystring = <string>this is
 some preformatted
 text</string>.Value

1
然而,编译器将无法优化掉XML元素的构建。请谨慎使用! - Christian Klauser

1

VB在字符串操作方面较弱。没有预格式化或内联转义字符。任何特殊字符都需要附加到字符串中。


1
VB 在很多方面都比较弱,但这并不是它的缺点。 VB.NET 更易学习,因为它更具描述性;而 C# 通过特殊字符等提供了许多快捷方式,但这也使得初学者更难掌握。VB.NET 面向快速应用程序开发和经验较少的开发人员; 而 C# 则面向企业/框架开发和更高级别的开发人员。每种语言都有非常有效的目的,没有一个从客观角度来说是“更好”的,只是在不同的任务上表现更佳。 - STW
@Yoooder - 那正是我想表达的观点,因材施教。但就字符串而言,C# 明显领先于VB(以牺牲对初学者的描述性为代价)。 - stevehipwell
@STW我喜欢这句话“C#面向企业/框架开发和更高级的开发人员”。如果我的VB狂热同事读到这样的话,他一定会很生气。谢谢你让我开心了一整天。 - Tim Meers
1
@Tim -- 不要把这个过分的脱离上下文,好处是微不足道的--尽管我更喜欢C#,但我会认为VB.NET是一种整体上相当平等的语言。 - STW
哦不,这都很好。我同时使用VB6和C#,但是我更喜欢C#而不是我所使用的任何一种VB。 - Tim Meers

1

你可能想尝试Alex Papadimoulis的 "Smart Paster" 插件。它可以让你将一个字符串作为 StringBuilder 粘贴到 C# 或 VB 代码中。


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