MenuItemCollection与List <MenuItem>

Pre*_*zel 2 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
}
Run Code Online (Sandbox Code Playgroud)

通过我的代码,我发现每个MenuItem本身都有一个名为ChildItems的属性,它恰好是MenuItemCollection类型.好奇,我想我会用这个MenuItemCollection替换我的MenuItem列表.

将第一行更改为:

var dynMenu = new MenuItemCollection();
Run Code Online (Sandbox Code Playgroud)

我注意到这个MenuItemCollection类型没有扩展方法,如"Any <>","All <>","First <>"等等 - 我觉得很奇怪.

有没有办法在这里使用Lambda表达式?

我应该回到使用"List <<\MenuItem>"吗?

Ree*_*sey 9

MenuItemCollection是一个.NET 1.1类.特别是,它没有实现任何通用集合接口IEnumerable<MenuItem>.

由于这只实现IEnumerable而不是IEnumerable<MenuItem>LINQ提供的所有扩展方法都不起作用.但是,你可以通过以下方式让他们回来:

if (dynMenu.Cast<MenuItem>().Any(x => x.Test == controller)) { // ...
Run Code Online (Sandbox Code Playgroud)

角色扩展方法转换IEnumerableIEnumerable<T>,提供访问其他LINQ扩展方法.