我不确定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相关问答推荐

包含Include的低速EF核心查询

从组件属性调用异步方法的正确方法

由于 Blazor Change Detection API,组件重新渲染被跳过.如何避免?

在 aspx 页面中使用 if else 和 eval

在正则表达式中允许 -(破折号)

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

System.Web.MVC 自 MS14-059 以来未复制到 bin 文件夹中.如何防止由于 Windows 更新而创建缺少 DLL 的构建?

HttpModules 的执行顺序是如何确定的?

在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误

在asp.net mvc 3中实现FilterAttribute,IActionFilter和从ActionFilterAttribute继承有什么区别?

将查询参数绑定到 ASP.NET Core 中的模型

如何从 ASP.Net 发布然后重定向到外部 URL?

根据 DropDownList 的值动态启用或禁用RequiredFieldValidator

.NET 4.0 中的自定义 MembershipProvider

ASP.NET MVC NonAction 含义

在 ASP.NET 标识中添加角色

LinkBut​​ton 向 OnClick 后面的代码发送值

ASP.NET 5 (vNext) - 获取配置设置

RegisterStartupScript 不适用于 ScriptManager、Updatepanel.这是为什么?

Appdomain 回收究竟是什么