我试图给Enumerable类添加一个扩展。但似乎扩展FindEven()不是由C#编译器挑选的。当我建立,编译吐错误:Enumerable不能正常工作的C#扩展
CS0117 'Enumerable' does not contain a definition for 'FindEven'
这里是我的代码:
namespace ConsoleApp1
{
static public class Program
{
static IEnumerable<int> FindEven(this IEnumerable<int> array, Func<int, bool> predicte)
{
foreach (var n in array)
{
if (predicte(n))
{
yield return n;
}
}
}
static public void Main(string[] args)
{
int[] numbers = new[]{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var result = Enumerable.Select(Enumerable.FindEven(numbers, n => n % 2 == 0), n => n);
foreach (var output in result)
Console.WriteLine(output);
Console.ReadLine();
}
}
}
任何我在这里不正确?
[编辑]
我想在这里做的是看到在下面的LINQ的“其中”语句是如何工作的通过制作“去哪儿”,在这种情况下是“FindEven”我自己的版本(我不得不承认一个好名字)。
var result = from element in numbers
where element % 2 == 0
select element;
我想,如果我通过在可枚举[从元数据]定义的“去哪儿”替换“FindEven” ......这应该是LINQ的工作方式。但我无法获得编译的代码。
感谢
顺便说一句any1有一个想法,我怎么需要1500声望来创建一个'扩展'标签? – r0ng
对于数据质量真的 - 它会阻止'任何人'在标签之后的标签之后创建标签。 – glosrob
只需将'Enumerable.FindEven'替换为'Program.FindEven'或将其称为实例成员函数'numbers.FindEven'即可。请注意,有一种现有的扩展方法完全符合您所谓的“Where”。 –