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吗?@dannykobsource。其中是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;
}
}
}