gpt4 book ai didi

c# String.Split((string)null, , StringSplitOptions.RemoveEmptyEntries) 不按空格分割,它有什么作用?

转载 作者:行者123 更新时间:2023-12-02 17:58:36 40 4
gpt4 key购买 nike

我有代码(在本例中针对 .NET Core 3.1),我想在空白处拆分字符串。我的草稿代码是

string s = "A B";
var parts = s.Split(null, StringSplitOptions.RemoveEmptyEntries);

但是编译器提示第一个参数是 (char[])(string?) 之间存在歧义。我选择将 null 转换为字符串:

string s = "A B";
var parts = s.Split((string)null, StringSplitOptions.RemoveEmptyEntries);

然而,结果出人意料地是一个由一个字符串“A B”组成的数组。

事实证明,通过对 Split 的所有重载进行重复文档的研究,我们发现这个签名(采用单个字符串分隔符的签名)是唯一使用空分隔符的签名 < em>不是意味着在空白处中断。

我是否编码了 (string[])null(char[])nullnew char[0]new string[0] 我会得到我期望的结果。我必须承认,不完整的编译器错误未能列出所有不明确的可能性,在某种程度上引导我走上了这条错误的道路。我脑子里有字符串分隔符,因此从错误消息中忽略了 (char[]) 版本,并选择了 (string) 版本。

但这留下了一个问题,Split((string)null, ...) 实际上做了什么?文档似乎没有说明任何一种方式,但显然答案是它只是返回单元素数组中的原始字符串。

最佳答案

直接取自 .Net Standard 2.1(包括 .Net Core 3.1)的源代码,Split(string?separator, StringSplitOptions options = StringSplitOptions.None) 的定义,位于 source.dot.net :

public string[] Split(string? separator, StringSplitOptions options = StringSplitOptions.None)
{
return SplitInternal(separator ?? string.Empty, null, int.MaxValue, options);
}

如您所见,它检查 null 并将 string.Empty 传递给方法 SplitInternal,因此要回答您的问题,它分割一个空字符串,生成原始字符串。

这些产生相同的结果:

string s = "Hello World";   
Console.WriteLine(s.Split((string)null, StringSplitOptions.RemoveEmptyEntries)[0]); //prints Hello World
Console.WriteLine(s.Split(string.Empty, StringSplitOptions.RemoveEmptyEntries)[0]); //prints Hello World

关于c# String.Split((string)null, , StringSplitOptions.RemoveEmptyEntries) 不按空格分割,它有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75009177/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com