为什么vbCrLf作为文字插入我的字符串而不是新行?

时间:2014-05-11 09:10:05

标签: .net vb.net string

我有一个字符串:

Dim str = "version=""1.0"" & VbCrLf & TIME=10:12:23"

如果我运行MsgBox(str),则返回

  

version =“1.0”& VbCrLf&时间= 10:12:23

我希望它是:

  

版本= “1.0”
  时间= 10:12:23

怎么做(返回两行)?

6 个答案:

答案 0 :(得分:8)

您似乎错过了关闭"在版本定义之后,Vb包含您键入字符串的所有文本。事实是,为了在字符串中插入引号,你需要写两次:""。并在字符串结尾#34;成为""",这是"" - 单引号和"关闭字符串的符号。

因此,也许

Dim str = "version=""1.0""" & VbCrLf & "TIME=10:12:23"

会有帮助吗?

更新:从linqpad测试:

Dim str = "version=""1.0""" & Microsoft.VisualBasic.Constants.VbCrLf & "TIME=10:12:23"
Microsoft.VisualBasic.MsgBox(str)

结果是:

enter image description here

更新2 。在评论中进行一些讨论之后,似乎问题是如何在Vb.Net / C#"中动态评估一段代码。所以问题更广泛,它是关于使用编译器作为服务。

为了正确评估表达式,最先进的方法(AFAIK)是使用Roslyn。正如我在这里写的那样(Evaluating a mathematical expression),可以做类似的事情(它是C#但可以很容易地翻译成Vb.Net):

using Roslyn.Scripting.CSharp;

namespace RoslynScriptingDemo {
    class Program {
        static void Main(string[] args)        {
            var engine = new ScriptEngine();
            engine.Execute(@"System.Console.WriteLine((450*5)+((3.14*7)/50)*100);");
        }
    }
}

答案 1 :(得分:1)

创建此类字符串的简便方法是使用String.Format

 Dim msg As String = 
    String.Format("version="{0}{1}{0} {2} Time = {3}", 
                  Chr(34), varVersion, Environment.NewLine, varTime)

即使您使用文字("1.0")而不是变量(varVersion),代码也更具可读性。

version = "1.0" Time = 07:24

使用引号会使一切变得更复杂,所以不要这样做。我通常使用[方括号]代替它们:

 Dim msg As String = 
    String.Format("version="[{0}] {2} Time = [{3}]", 
                  varVersion, Environment.NewLine, varTime)

version = [1.0] Time = [07:24]

答案 2 :(得分:0)

如需报价,则需要“”“”(四个引号)。 因此:

Dim s As String = "version=" & """" & "1.0" & """" & vbCrLf & "TIME=10:12:23"
MsgBox(s)

OR:

Dim q as Char = """"
Dim s() As String = "version=" & q & "1.0" & q & vbCrLf & "TIME=10:12:23"
MsgBox(s)

原因如下: 一个引号打开或关闭字符串文字。 两个引号表示空字符串。 因此,三个引号是一个空字符串加上一个孤立的字符串分隔符。

答案 3 :(得分:0)

你只是在1.0之后错过双引号:

Dim str = "version=""1.0""" & vbCrLf & "TIME=10:12:23"

答案 4 :(得分:0)

或者使用它来缩短你的代码...

Dim str As String =" version =" &安培; Chr(34)& " 1.0" &安培; Chr(34)& vbCrLf& "时间= 10:12:23"

Chr(34)相当于Double Quote"

答案 5 :(得分:-2)

请参阅String.Replace

Dim Text As String = "version=""1.0"" & vbCrLf & TIME=10:12:23"
MsgBox(Text.Replace(" & vbCrLf & ", vbCrLf))