.NET字符串拆分方法的奇怪行为

.NET字符串拆分方法的奇怪行为,.net,string,split,.net,String,Split,我在使用.NET 3.5时遇到string.split问题: 要拆分的字符串为: dim source as string = "ab|foo|bar|bar|bar-foo|ab|ezrezertr|ghghhjhj|ab|foo|xxx|" dim result() as string = source.split("ab|") 在Winforms应用程序中使用时,结果是“正确的”: 结果(0)是“foo | bar | bar | bar foo |” 结果(1)是“ezrezertr

我在使用.NET 3.5时遇到string.split问题:

要拆分的字符串为:

dim source as string = "ab|foo|bar|bar|bar-foo|ab|ezrezertr|ghghhjhj|ab|foo|xxx|"
dim result() as string = source.split("ab|")
在Winforms应用程序中使用时,结果是“正确的”:

结果(0)是“foo | bar | bar | bar foo |”

结果(1)是“ezrezertr | ghghhj |”

结果(2)是“foo | xxx |”

我很高兴

在ASP.NET代码隐藏中使用时,结果是:

结果(0)是“b | foo | bar | bar | bar foo |”

结果(1)是“b | ezrezertr | ghhj |”

结果(2)是“b | foo | xxx |”

换句话说,split函数只去掉分隔符字符串的第一个字符!
有人知道为什么吗?

如果输入字符串相同,那么我几乎可以向您保证控制台应用程序和ASP.NET的拆分方法的行为相同


可能输出显示不正确?

ASP.NET结果看起来像是在使用而不是在使用。字符串
“ab |”
将被解释为“a”的正则表达式,后跟“b”或无,因此只匹配“a”


后来:第二种理论

  • 不存在接受单个字符串参数的
    String.Split
    重载。唯一的单参数重载采用
    char
    数组
  • String.Splt(char())
    将根据传递的任何字符进行拆分
  • VB,如果没有
    选项Strict On
    ,将隐式地将字符串转换为字符数组
因此,我认为在ASP.NET的情况下,您没有对严格要求的
选项,因此
字符串.Split(另一个字符串)
被视为
字符串.Split(另一个字符串.tocharray())

因此,仅在a
“b”
上拆分

然而,这就留下了第一个案例如何作为传递字符串的问题,但是在没有额外参数的情况下(a
SplitOptions
),不会出现重载获取
string()


摘要:Visual Basic在文件/项目/语言级别上设置的额外隐式转换和行为可以使相同的代码表现出不同的行为。

在WinForms、Console或ASP.NET应用程序中使用Split()方法的位置没有区别。字符串类在任何地方都是相同的。问题在于您的代码。问题在于我刚刚将一个函数从Winforms代码复制粘贴到ASP代码,然后我可以观察结果,如所述。在同一台计算机上或托管服务器上没有区别!代码使用string.split和no regex@迪迪埃:我喜欢认为我是独一无二的,但我并没有特别的知识。只是有很多解决误解的经验。。。。我这里还有第二个理论。谢谢Richard,你的“第二个理论”一定是正确的,它解释了行为上的差异。因此,为了解决这个问题,我需要做一个string=replace(string,“ab |“,“#”)然后在“#”字符上拆分结果。。。假设字符串中不存在用作分隔符的“#”字符,情况就是这样。不是绝对完美,但t可以完成任务。@Didier:或者以字符串数组的形式明确传递参数(在C#中,这将是
new[]{“ab |”}
),以避免字符串到字符()的转换。将
选项设置为“严格打开”
会更好,但其余代码可能取决于它是否关闭。嘿,Richard,你一定是一个非常罕见的人,一个能够保证Microsoft代码的人?英雄联盟