如何将通用选择器Func 传递给某种方法以执行搜索?

问题描述 投票:0回答:1

我有一堂课,有一些领域。

public abstract class RegisteredUser : Transformable //implements interface
{
    protected int id;
    protected bool active;
    protected string name;
    protected string lastName;
    protected string email;
    protected string username;
    protected string password;
    protected int institution;

//OTHER  STUFF FROM  THIS CLASS GO HERE..`
} 
Assistant : RegisteredUser
{
}

一旦我从.txt文件加载了所有数据,我将拥有一个像这样的静态字典:

public static Dictionary<int, Transformable> assistants = null; //this will be filed with objects and their id's

现在,我的任务是为该控制台应用程序实现search的功能。由于所有子类都将具有抽象类中的字段,因此该应用程序的用户应可以选择通过其任何字段对任何对象AssistantProfessorAdministrator进行search

我想通过使用LINQ/lambdas实现这一目标。我的想法是根据正在搜索的任何字段创建一个通用方法,该方法将接受selector(或某些lambda表达式)。

我对LINQ和C#以及对编程来说是完全陌生的,所以我希望这里不要胡说八道。

public static List<RegisteredUser> search(Dictionary<int, Transformable> map, 
                                          Func<bool,RegisteredUser> selector, 
                                          Transformable userType)
{
    if (userType is Assistant)
    {
        List<RegisteredUser> list = map.Select(item => (Assistant) item.Value)
                                       .ToList()
                                       .Select(selector)
                                       .ToList();
    }
    //other if/else statements  

    return list;
}

当然,Visual Studio中的行是红色的:)基本上,我希望能够发送类似user => user.Name.Contains("some string which will be entered by the end user")转换为通用功能。

我有一堂课,有一些领域。公共抽象类RegisteredUser:可转换//实现接口{protected int id;受保护的布尔活性剂;受保护的字符串名称; ...

c# linq search lambda
1个回答
3
投票

您实际上并不需要编写单独的函数来完成您想实现的目标,都可以直接通过Linq完成:

© www.soinside.com 2019 - 2024. All rights reserved.