2015-06-28 25 views
0

我尝试使用下面的代码创建一个通用的扩展方法,但它给编译无法创建通用的扩展方法

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

您需要使方法通用:'GetWholeHerichy ' –

回答

2

你必须“动”的方法签名的泛型类型:

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

酷似各种Enumerable.*方法。