我创建了一个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()
获取所有回调。
如何插入条件以仅获取具有指定名称的命令?
提前谢谢。
答案 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)