Linq错误:"字符串[]不包含'除了'的定义。"

时间:2015-03-14 12:23:19

标签: c# linq

这是我的代码:

    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添加到源文件的顶部。

有什么问题?

2 个答案:

答案 0 :(得分:10)

您的substrings变量是string[],但disposableSeparatorschar[] - 而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(stringchar)。如果要使用“除外”,请将分隔符更改为字符串数组。

https://msdn.microsoft.com/en-us/library/vstudio/bb300779%28v=vs.100%29.aspx