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
属性吗?