这是我的代码:
public static string[] SplitKeepSeparators(this string source, char[] keptSeparators, char[] disposableSeparators = null)
{
if (disposableSeparators == null)
{
disposableSeparators = new char[] { };
}
string separatorsString = string.Join("", keptSeparators.Concat(disposableSeparators));
string[] substrings = Regex.Split(source, @"(?<=[" + separatorsString + "])");
return substrings.Except(disposableSeparators); // error here
}
我收到编译时错误string[] does not contain a definition for 'Except' and the best extension method overload ... has some invalid arguments
。
我已将using System.Linq
添加到源文件的顶部。
有什么问题?
答案 0 :(得分:10)
您的substrings
变量是string[]
,但disposableSeparators
是char[]
- 而Except
适用于两个相同类型的序列。
将disposableSeparators
更改为string[]
,或使用以下内容:
return substrings.Except(disposableSeparators.Select(x => x.ToString())
.ToArray();
请注意,对ToArray()
的调用 - Except
只会返回IEnumerable<T>
,而您的方法会被声明为返回string[]
。
答案 1 :(得分:3)
您的问题是,您使用的.Except<T>(this IEnumerable<T> source, IEnumerable<T> other)
有两种不同类型的T(string
和char
)。如果要使用“除外”,请将分隔符更改为字符串数组。
https://msdn.microsoft.com/en-us/library/vstudio/bb300779%28v=vs.100%29.aspx