我试图使用以下代码创建一个通用扩展方法,但它会产生编译时错误
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>
以使类非通用,那么TSource
和TResult
在整个类中变得不确定
答案 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.*
方法完全相同。