C#:基于条件从集合返回元素而不使用委托的泛型函数

C#:基于条件从集合返回元素而不使用委托的泛型函数,c#,C#,所以我有一个函数,它根据条件从集合返回元素: public static IEnumerable<T> Search<T>(IEnumerable<T> source, Func<T, bool> filter) { return source.Where(filter); } 以及对象的列表 我想创建获取条件的函数,例如所有年龄大于某个数字的人对象。我猜面试官想要一些(无用的)东西,比如 公共接口可过滤 { 布尔匹配(字符串匹配); }

所以我有一个函数,它根据条件从集合返回元素:

public static IEnumerable<T> Search<T>(IEnumerable<T> source, Func<T, bool> filter)
{
    return source.Where(filter);
}
以及
对象的
列表


我想创建获取条件的函数,例如所有年龄大于某个数字的
对象。

我猜面试官想要一些(无用的)东西,比如

公共接口可过滤
{
布尔匹配(字符串匹配);
}
公共静态IEnumerable搜索(此IEnumerable源,字符串匹配),其中T:IFilterable
{
返回source.Where(x=>x.Match(Match));
}
或者没有任何灵气

public interface IFilterable
{
     bool Match(string match);
}
public static IEnumerable<T> Search<T>(this IEnumerable<T> source, string match) where T: IFilterable
{
    foreach(var e in source)
    {
        if(e.Match(match)) yield return e;
    }

}
公共接口可过滤
{
布尔匹配(字符串匹配);
}
公共静态IEnumerable搜索(此IEnumerable源,字符串匹配),其中T:IFilterable
{
foreach(源中的变量e)
{
if(e.Match(Match))收益率e;
}
}

不带过滤器的示例可以通过多种方式完成,但在这里,另一种方法是使用
yeild

public static IEnumerable<Person> GetPersonByMinimumAge(IEnumerable<Person> persons, int age) 
{ 
    foreach(var person in persons)
    {
        if(person.age >= age)
        {
            yield return person;
        }
    }
}
公共静态IEnumerable GetPersonByMinimumAge(IEnumerable persons,int-age)
{ 
foreach(var个人对个人)
{
如果(person.age>=年龄)
{
收益人;
}
}
}

为什么不使用Func?您希望它如何工作?这是一个我在一次面试中被问到的问题,我不知道答案。问我这个问题的人告诉我,我需要在我的类(例如Person类)中创建一种接口。还有一种方法:使用LINQ表达式。不容易而且肯定不漂亮没有这个x=>x.Match(Match)?@dannykob如果没有
Func
LINQ,你就不能使用LINQ吗?@dannykob
source。其中
是LINQ,不知道你在说什么about@CamiloTerevinto如果他们不知道LINQ方法在哪里,那么为什么你认为他们会问如何在没有LINQ的情况下实现它?这假设每个可能的过滤器都有一个新的方法,甚至不接近原始的泛型code@CamiloTerevinto是的,就是这样。他要求一个特定的过滤器,但为了摆脱func,他必须为每个过滤器创建许多方法。
public interface IFilterable
{
     bool Match(string match);
}
public static IEnumerable<T> Search<T>(this IEnumerable<T> source, string match) where T: IFilterable
{
    foreach(var e in source)
    {
        if(e.Match(match)) yield return e;
    }

}
public static IEnumerable<Person> GetPersonByMinimumAge(IEnumerable<Person> persons, int age) 
{ 
    foreach(var person in persons)
    {
        if(person.age >= age)
        {
            yield return person;
        }
    }
}