【发布时间】:2021-05-02 11:09:42
【问题描述】:
我需要将一个IEnumerable 和一个委托传递给我的方法,然后对其进行过滤并返回一个带有通过过滤器的数字的IEnumerable 集合。
Func<int, bool> filter = x => x % 3 == 0;
public static IEnumerable<int> Filter(IEnumerable<int> numbers, Func<int, bool> filter)
{
foreach (int number in numbers)
{
if (filter.Invoke(number))
{
// add number to collection
}
}
// return collection
}
我尝试过像这样创建一个新集合:
IEnumerable<int> result = new IEnumerable<int>();
但这是不可能的,因为IEnumerable 是一个抽象类。
我应该如何创建和返回这个集合?我知道有很多简单的方法可以做到这一点,但找不到任何方法。
【问题讨论】:
-
这能回答你的问题吗? What is the yield keyword used for in C#?
-
类似
numbers.Where(filter)?您甚至可能不需要该方法,Enumerable.Where()会为您完成(以及更多)。 -
我需要一个方法,因为我的任务是这样说的。但就是这样,我知道有一种简单的方法可以做到这一点。谢谢。
-
你不能实例化
IEnumerable<T>,因为它是一个接口。如果您使用List<T>(实现IEnumerable<T>),您将能够向其中添加项目然后返回。 -
但这是不可能的,因为 IEnumerable 是一个抽象类。 - 不,实际上 -
IEnumerable是一个接口 - 不是一个抽象类!
标签: c# delegates ienumerable