我认为您想尝试将 MembershipUser 的任意 Enumerable 过滤到本地列表中。因此,您的过滤器应该是 type Func<IEnumerable<MembershipUser>, List<MembershipUser>>
。另外缺少一件事:您要过滤的此列表。当您调用它时,它必须作为参数传递给过滤器。我假设它是作为参数传递的,但它也可以很容易地成为您的类的另一个内部变量或属性。
这将产生以下函数(完整工作示例见下文):
void FindType(Func<IEnumerable<MembershipUser>, List<MembershipUser>> filter, IEnumerable<MembershipUser> list)
{
Users = filter(list);
}
我从大学的函数式编程课程中学到了一些东西:首先让你的类型正确,然后其他的会随之而来。想想你在输入和输出方面想要做什么。不仅适用于您的函数,也适用于您的 lambda。(本质上是无名的函数)。
完整的工作样本:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Sample d = new Sample();
IEnumerable<MembershipUser> ll = new List<MembershipUser>()
{
new MembershipUser() { Name ="1", IsApproved=false},
new MembershipUser() { Name ="2", IsApproved=true},
};
d.FindType(members => members.Where(m => m.IsApproved).ToList(), ll);
Console.WriteLine(d.Users.Count());
}
class MembershipUser
{
public string Name
{get;set;}
public bool IsApproved
{get;set;}
}
class Sample
{
private List<MembershipUser> users;
public void FindType(Func<IEnumerable<MembershipUser>, List<MembershipUser>> filter, IEnumerable<MembershipUser> list)
{
users = filter(list);
}
public List<MembershipUser> Users
{
get { return users; }
}
}
}
}