向我的班级添加功能

时间:2016-02-12 23:52:57

标签: c# list generics

我有一个类,这个类中有一个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

3 个答案:

答案 0 :(得分:2)

你的代表的类型错误,应该是:

public Func<Func<T, bool>, IEnumerable<T>> Where { get; set; }

答案 1 :(得分:2)

根据IEnumerable on MSDNaptIEnumerable<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();
}