C# 向我的类添加函数

C# 向我的类添加函数,c#,list,generics,C#,List,Generics,我有一个类,这个类中有一个列表,我想在我的类中添加一个Where函数,调用列表的Where函数,类似这样: 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
函数,调用列表的
Where
函数,类似这样:

 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;
    }
 }
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();
}
公共类MyClass其中T:class
{    
公共Func其中{get;set;}
public List mylist=new List();
公共MyClass()
{
Where=mylist.Where;
}
}
我得到了一个错误:

No overload for 'Where' matches delegate 'Func<T, IEnumerable<T>>
没有重载“Where”匹配委托函数

您的代理人的类型错误,应该是:

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

您的代理人的类型错误,应该是:

public Func<Func<T, bool>, IEnumerable<T>> Where { get; set; }
public Func其中{get;set;}
根据有
IEnumerable Where(Func)
IEnumerable Where(Func)

这些可分别铸造到
Func
Func

两者都不匹配为属性“Where”(即
Func
)声明的类型,这就是为什么编译器告诉您
没有重载“Where”匹配委托Func

您需要选择适当的委托类型。

根据有
IEnumerable Where(Func)
IEnumerable Where(Func)

这些可分别铸造到
Func
Func

两者都不匹配为属性“Where”(即
Func
)声明的类型,这就是为什么编译器告诉您
没有重载“Where”匹配委托Func

您需要选择适当的代理类型。

列表
不提供
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;
    }
 }
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();
}
公共类MyClass:IEnumerable其中T:class{
公共函数筛选器{get;set;}
=T=>true;//默认值:无筛选器
public List mylist=new List();
公共IEnumerator GetEnumerator()
=>mylist.Where(Filter.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
=>mylist.Where(Filter.GetEnumerator();
}
列表
不提供
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;
    }
 }
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();
}
公共类MyClass:IEnumerable其中T:class{
公共函数筛选器{get;set;}
=T=>true;//默认值:无筛选器
public List mylist=new List();
公共IEnumerator GetEnumerator()
=>mylist.Where(Filter.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
=>mylist.Where(Filter.GetEnumerator();
}

您能解释一下您打算如何使用
Where
属性吗?您能解释一下您打算如何使用
Where
属性吗?