我有一个类,这个类中有一个List,我想在我的类中添加一个Where
函数来调用List的 public class MyClass<T> where T : class
{
public Func<T, IEnumerable<T>> Where{ get; set; }
public List<T> mylist = new List<T>();
public MyClass()
{
Where = mylist.Where;
}
}
函数,像这样:
No overload for 'Where' matches delegate 'Func<T, IEnumerable<T>>
我收到错误:
make OS=MINGW32_NT-6.1
答案 0 :(得分:2)
你的代表的类型错误,应该是:
public Func<Func<T, bool>, IEnumerable<T>> Where { get; set; }
答案 1 :(得分:2)
根据IEnumerable on MSDN,apt
和IEnumerable<TSource> Where<TSource>(Func<TSource, Boolean>)
。
这些可以合理地投放到IEnumerable<TSource> Where<TSource>(Func<TSource, Int32, Boolean>)
和Func<Func<TSource, Boolean>, IEnumerable<TSource>>
。
既不匹配为您的属性声明的类型&#34; Where&#34;,Func<Func<TSource, Int32, Boolean>, IEnumerable<TSource>>
,这就是编译器告诉您Func<T, IEnumerable<T>>
的原因。
您需要选择合适的委托类型。
答案 2 :(得分:0)
List<T>
不提供Where
- 功能。 Where
是枚举项的扩展函数,请参阅MSDN。请参阅其他答案如何纠正您的属性以匹配扩展功能的类型。
当然我不知道你想要什么,但如果你想要一个带有可分配过滤器的列表类,你可以使用这样的东西:
public class MyClass<T> : IEnumerable<T> where T : class {
public Func<T, bool> Filter { get; set; }
= T => true; // default: no filter
public List<T> mylist = new List<T>();
public IEnumerator<T> GetEnumerator()
=> mylist.Where(Filter).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
=> mylist.Where(Filter).GetEnumerator();
}