这将返回一个只有一个元素的数组,因此会引发异常。但当我省略 StringSplitOptions.TrimEntries 时,它可以工作。
using System;
public class Program
{
public static void Main()
{
Console.WriteLine("a-b".Split('+', '-', StringSplitOptions.TrimEntries)[1]);
}
}
可能是它选择了这种过载:
public string[] Split(char separator, int count, StringSplitOptions options = StringSplitOptions.None)
但是自从 C# 中char
与...兼容以来int
?
char
从版本 1 开始,在 C# 中已经可以隐式转换为int
。必须如此;它是唯一适合方法调用的重载。如果不存在此重载,则代码不会编译。
我推测您预期的是这种过载:
但是,此选项与提供的参数不兼容,因为修饰符
params
不包含在签名中(params
必须位于参数列表的最后)。因此,方法调用的部分不能在这里解释为数组。也没有可以选择的'+', '-'
重载使用。IEnumerable<char>
如果您希望使用这个其他重载,则必须确保在方法调用解析之前数组已完全构造。
是的,a
char
可以隐式转换为int
演示