2015-06-28 49 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.*方法。