【发布时间】:2011-03-05 13:19:09
【问题描述】:
最近我用 Lambda 表达式写了一段 C# 代码:
var dynMenu = new List<MenuItem>();
// some code to add menu items to dynMenu
if (!dynMenu.Any(x => x.Text == controller))
{
// do something
}
在浏览我的代码时,我发现每个 MenuItem 本身都有一个名为 ChildItems 的属性,该属性恰好是 MenuItemCollection 类型。很感兴趣,我想我会用这个 MenuItemCollection 替换我的 MenuItem 列表。
将第一行改为:
var dynMenu = new MenuItemCollection();
我注意到这个 MenuItemCollection 类型没有“Any”、“All”、“First”等扩展方法——我觉得这很奇怪。
有没有办法在这里使用 Lambda 表达式?
我应该回到使用“列表”吗?
【问题讨论】:
-
使用 OfType
-
@Darren,应该回答这个问题。
-
你的意思是这样吗? dynMenu.AsQueryable().OfType
-
这里使用 Cast
比 OfType 更合适。 OfType 实际上过滤了集合 - 在这种情况下,您提前知道每个元素的类型都是相同的,因此 Cast 更好。
标签: c# lambda extension-methods menuitem