C#Lambda-选择条件

时间:2016-03-29 17:05:53

标签: c# lambda

我创建了一个Command - 类,它有两个重要的成员。

public class Command
{
    public string Name { get; set; }
    public CommandExecutedCallback Callback { get; set; }
    public delegate void CommandExecutedCallback(Command command);
}

我在List<Command>中保存了此类的多个对象。

另一个班级CommandProcessor有一个成员函数GetCallbacks(string name)

我想使用lambda表达式来获取CommandExecutedCallback的数组 - 代理名称匹配的条件。

我可以使用return commandList.Select(t => t.Callback).ToArray()获取所有回调。

如何插入条件以仅获取具有指定名称的命令?

提前谢谢。

3 个答案:

答案 0 :(得分:8)

您需要添加Where条件:

return commandList.Where(t => t.Name == name).Select(t => t.Callback);

除非你真的需要,否则你也应该避免致电ToArray。除非您专门将此数据传递给需要数组的其他方法,否则使用ToArray复制所有数据可能是不必要的(而且相当昂贵)操作。

答案 1 :(得分:2)

这是你的意思吗?

return commandList
    .Where(t => t.Name == "someName")
    .Select(t => t.Callback)
    .ToArray();

答案 2 :(得分:0)

您需要使用WHERE而不是SELECT。使用选择,您可以从列表中告诉您什么,并使用WHERE过滤要显示的列表。

return commandList.Where(t => t.Name == "VALUE").Select(t => t.Callback)