无法创建通用扩展方法

时间:2015-06-28 09:17:33

标签: c# generics extension-methods

我试图使用以下代码创建一个通用扩展方法,但它会产生编译时错误

public static class extentions<TSource, TResult>
{
    public static IEnumerable<TSource> GetWholeHerichy(this IEnumerable<TSource> source, Func<TSource, TResult> KeySelector, Func<TSource, TResult> FKeySelector, TResult KeyElementid)
    {
        var k = source.Where(a => EqualityComparer<TResult>.Default.Equals(KeyElementid, KeySelector(a))).ToList();
        while(true)
        {
            var nextLevel = source.Where(a => k.Select(b => KeySelector(b)).Contains(FKeySelector(a)) && ! k.Select(b => KeySelector(b)).Contains(KeySelector(a)));
            if (nextLevel == null || nextLevel.Count() < 1)
                break;
            k.AddRange(nextLevel);
        }
        return k.AsEnumerable();
    }
}

错误是

  

错误1必须在非泛型静态类中定义扩展方法

如果我从<TSource, TResult>删除public static class extentions<TSource, TResult>以使类非通用,那么TSourceTResult在整个类中变得不确定

1 个答案:

答案 0 :(得分:2)

你必须&#34;移动&#34;方法签名中的泛型类型:

public static IEnumerable<TSource> GetWholeHerichy<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> KeySelector, Func<TSource, TResult> FKeySelector, TResult KeyElementid)

与各种Enumerable.*方法完全相同。