VB.NET在新行上拆分(C#转换)

VB.NET在新行上拆分(C#转换),c#,vb.net,string,split,C#,Vb.net,String,Split,我正在尝试将此代码从C#转换为VB.NET string[] lines = theText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); 我的问题是,它在messagebox中打印整个文本框内容,而不是每行内容 Dim Excluded() As String Dim arg() As String = {"\r\n", "\n"} Excluded = txtExclude.Text

我正在尝试将此代码从C#转换为VB.NET

string[] lines = theText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);
我的问题是,它在messagebox中打印整个文本框内容,而不是每行内容

    Dim Excluded() As String

    Dim arg() As String = {"\r\n", "\n"}

    Excluded = txtExclude.Text.Split(arg, StringSplitOptions.None)

    For i As Integer = 0 To Excluded.GetUpperBound(0)
        MessageBox.Show("'" & Excluded(i) & "'")
    Next

就字符串文字而言,VB.Net中并不存在转义序列

您可以使用以下两个特殊常数:

vbCrLf

vbLf

Dim Excluded() As String

Dim arg() As String = {vbCrLf, vbLf}

Excluded = txtExclude.Text.Split(arg, StringSplitOptions.None)

For i As Integer = 0 To Excluded.GetUpperBound(0)
    MessageBox.Show("'" & Excluded(i) & "'")
Next
应该这样做(未经测试)。

在VB中不能使用反斜杠(
\
)转义字符。使用
ControlChars
类:

Dim arg() As String = { ControlChars.CrLf, ControlChars.Lf }
从:

您的c#代码:

string[]line=text.Split(新字符串[]{“\r\n”,“\n”},StringSplitOptions.None)

已转换为VB.NET:

Dim lines As String() = theText.Split(New String() {vbCr & vbLf, vbLf}, StringSplitOptions.None)

你试过在线转换器吗?它为我提供了
Dim行作为String()=text.Split(新的String(){vbCr&vbLf,vbLf},StringSplitOptions.None)
+1,用于使用
ControlChars
而不是旧的VB6样式常量名称。:)是的,vb.net没有转义字符,因此您必须使用这些特殊字符。小错误:vbCrLf相当于C#“\r\n”,但vbNewLine依赖于平台。在Windows平台上(例如,通过mono在Linux上运行会有所不同),vbNewLine也相当于“\r\n”。因此,这段代码并不严格等同于C版本:“\n”将永远不会被捕获!使用vbLf或ControlChars。Lf@odalet字体这很奇怪。。实际上,const如何能够依赖于平台?它只能表示编译时平台,不能表示运行时平台。事实证明不是这样,它等于
vbCrLf
,即使在mono上也是如此:@noah1989:你是对的;在mono情况下,它显示为vbNewLine=\r\n。我想mono团队选择了支持语言兼容性而不是操作系统约定。无论如何,根据MSDN,vbNewline只代表一个“新行”,而不是一个明确指定的字符串。虽然不太可能,但它的实际价值可能会因平台或实现的不同而变化。vbCrLf永远不应该更改。@noah1989:关于依赖于平台的常量的一般情况,使用#如果预处理器指令。。。在mono vb运行时源代码中滚动一点,您会注意到一些常量在moonlight中没有定义。根据目标平台的不同,可以使用相同的构造将不同的值设置为常量。@noah1989:很抱歉发送垃圾邮件,但有趣的是,vbNewLine在VBScript时代似乎依赖于平台: