我不确定ASP.NET的ControlCollection是如何工作的,所以也许有人可以为我解释一下.

我最近发现了扩展方法和Linq的魔力.我很伤心地发现这不是有效的语法

var c=Controls.Where(x => x.ID=="Some ID").SingleOrDefault();

但是,据我所知,Controls确实实现了提供这种方法的IEnumerable接口,那么是什么原因呢?为什么那不管用呢?我至少为这个问题找到了一份像样的工作:

var list = (IEnumerable<Control>)Controls;
var this_item = list.Where(x => x.ID == "Some ID").SingleOrDefault();

推荐答案

不,IEnumerable没有很多扩展方法:IEnumerable<T>有.它们是两个独立的接口,尽管IEnumerable<T>扩展了IEnumerable.

正常的LINQ转换方法是使用Cast<T>()OfType<T>()扩展方法,它们do扩展了非通用接口:

IEnumerable<TextBox> textBoxes = Controls.OfType<TextBox>();
IEnumerable<Control> controls = Controls.Cast<Control>();

两者的区别在于,OfType只会跳过任何不属于所需类型的项目;Cast将抛出一个异常.

一旦获得了泛型IEnumerable<T>类型的引用,所有其他LINQ方法都可用.

Asp.net相关问答推荐

调用context.Users和context.Set User有什么区别?

在Docker Windows中,ASP.NET核心容器在自定义端口8080上运行,但ASP.NET容器在固定端口80上运行

ASP.NET Core 延迟加载始终返回 null

HttpRuntime.Cache[] 与 Application[]

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

.NET 站点如何隐藏其文件的 .aspx 扩展名?

使用实体框架从存储过程中获取数据

登录成功后 User.Identity.IsAuthenticated 为 false

无法读取配置部分system.servicemodel,因为它缺少部分声明

Directory.Exists 不适用于网络路径

如何获取 ActionLink 的工具提示?

Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用

如何将表从存储过程检索到数据表?

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

C# - 将图像输出到响应输出流给出 GDI+ 错误

好的 ASP.NET 类似 excel 的网格控件?

为什么 Controls 集合不提供所有 IEnumerable 方法?

配置授权服务器端点

Sys.WebForms.PageRequestManagerServerErrorException:处理服务器上的请求时发生未知错误.

在 ASP.NET 中获取服务器的 IP 地址?