C# 菜单项集合与列表<;MenuItem>;

C# 菜单项集合与列表<;MenuItem>;,c#,lambda,extension-methods,menuitem,C#,Lambda,Extension Methods,Menuitem,最近,我使用Lambda表达式编写了一段C代码: var dynMenu = new List<MenuItem>(); // some code to add menu items to dynMenu if (!dynMenu.Any(x => x.Text == controller)) { // do something } 我注意到这个MenuItemCollection类型没有扩展方法,比如“Any”、“All”、“First”等,我觉得很奇怪 这里有没

最近,我使用Lambda表达式编写了一段C代码:

var dynMenu = new List<MenuItem>();
// some code to add menu items to dynMenu
if (!dynMenu.Any(x => x.Text == controller))
{ 
    // do something
}
我注意到这个MenuItemCollection类型没有扩展方法,比如“Any”、“All”、“First”等,我觉得很奇怪

这里有没有利用Lambda表达式的方法

我是否应该继续使用“List是一个.NET 1.1类。它没有实现任何通用的集合接口,特别是,
IEnumerable

由于这只实现IEnumerable而不实现
IEnumerable
,因此LINQ提供的所有需要此功能的扩展方法都不起作用。但是,您可以通过执行以下操作将它们取回:

if (dynMenu.Cast<MenuItem>().Any(x => x.Test == controller)) { // ...
if(dynMenu.Cast().Any(x=>x.Test==controller)){/。。。

扩展方法将
IEnumerable
转换为
IEnumerable
,提供对其他LINQ扩展方法的访问。

MenuItemCollection是一个专门的集合,没有实现IEnumerable接口来使用您上面命名的LINQ扩展方法。我只需返回通用列表即可t有更多的功能

使用OfType()扩展方法的AsQueryable扩展方法,它会让你访问所有linq的优点。@Darren,应该这样回答。你的意思是这样的吗?dynMenu.AsQueryable().OfType().Any(x=>x.Text==“something”);在这里使用Cast比OfType更合适。OfType实际上会过滤集合-在本例中,您事先知道,每个元素的类型都是相同的,所以Cast更好。哈。我没有意识到这是.NET 1.1--所以我应该不使用它吗?我基本上是在尝试构建一个动态构造的多嵌套导航ba在ASP.NET MVC中,它似乎是一个合理的使用结构。(与其发明我自己的…@Pretzel:这取决于-我可能会使用List代替。但是,如果您最终不得不创建一个MenuItemCollection,有时只提前使用它会更容易(虽然很少见).Hmmm…好的。我会考虑的。谢谢你的建议和IEnumerable/类型课程!它确实实现了IEnumerable,只是没有实现IEnumerable。
if (dynMenu.Cast<MenuItem>().Any(x => x.Test == controller)) { // ...