MembershipUser の任意の Enumerable をローカル リストにフィルター処理したいと思います。したがって、フィルターは type にする必要がありますFunc<IEnumerable<MembershipUser>, List<MembershipUser>>
。さらに、フィルタリングしようとしているこのリストが欠けています。これは、呼び出すときにパラメーターとしてフィルターに渡す必要があります。パラメーターとして渡されると思いますが、クラスの別の内部変数またはプロパティである可能性もあります。
これにより、次の関数が生成されます (完全な動作サンプルについては、以下を参照してください)。
void FindType(Func<IEnumerable<MembershipUser>, List<MembershipUser>> filter, IEnumerable<MembershipUser> list)
{
Users = filter(list);
}
大学での関数型プログラミングのコースから学んだこと: まず型を正しく取得してから、残りの部分が続きます。入力と出力の観点から、何をしようとしているのかを考えてください。関数だけでなく、ラムダにも。(これは本質的に名前のない関数です)。
完全な作業サンプル:
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; }
}
}
}
}