无法创建通用扩展方法

unable to create generic extension method

我试图使用以下代码创建通用扩展方法,但它给出了编译时错误

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();
    }
}

错误是

Error 1 Extension method must be defined in a non-generic static class

如果我从 public static class extentions<TSource, TResult> 中删除 <TSource, TResult> 以使 class 成为非泛型,那么 TSourceTResult 将在整个 class 中变得未定义

您必须 "move" 方法签名中的泛型类型:

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

与各种 Enumerable.* 方法完全一样。