无法创建通用扩展方法
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 成为非泛型,那么 TSource
和 TResult
将在整个 class 中变得未定义
您必须 "move" 方法签名中的泛型类型:
public static IEnumerable<TSource> GetWholeHerichy<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> KeySelector, Func<TSource, TResult> FKeySelector, TResult KeyElementid)
与各种 Enumerable.*
方法完全一样。
我试图使用以下代码创建通用扩展方法,但它给出了编译时错误
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 成为非泛型,那么 TSource
和 TResult
将在整个 class 中变得未定义
您必须 "move" 方法签名中的泛型类型:
public static IEnumerable<TSource> GetWholeHerichy<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, TResult> KeySelector, Func<TSource, TResult> FKeySelector, TResult KeyElementid)
与各种 Enumerable.*
方法完全一样。