泛型 Generic 的两个小应用

来源:互联网 发布:rust值得购买知乎 编辑:程序博客网 时间:2024/04/28 16:19

做C#的估计对这个<T>都已经司空见惯了,而最常用的则是用在以下情况:

这里给出两个例子,一方面提供两个很好的功能,另一方面也可以拓展对泛型的应用。

遍历检索ASP.NET PAGE里面的控件

使用情形

情形一:在aspx页面里,每个控件都有一个ID属性,在*.aspx.cs中可以直接引用,用来取值,赋值等操作。但是如果某个控件被嵌入在另外一个控件中时,尤其是在某些控件的Template里面时,直接引用就会出错。系统会告诉你找不到ID为"***"的控件。例如:

 

这是因为Page.Controls中只包含了最外层的控件列表,而Template里面的控件并不在其中。这时如果你在.cs文件中进行代码编辑,输入tbLogin并不会出现智能提示,此时你就应该意识到有问题了。

情形二:有时候我们需要动态添加控件。举例来说,如果我有一个字符串,代表了我要显示的菜单。

 

这时你也是无法直接使用ID来引用这些动态生成的控件的。

情形三:其他,一下子想不起来了。

解决方案

其实很简单,控件列表是一个树结构,根是Page,每个都有独立的ID,因此采用遍历即可。至于为什么和泛型扯上关系,是因为每个控件的Type都是不一样的。看代码就知道:

 

应用

万能用法当然是调用FindControl<T>(this, id); 这里this代表Page。但是从性能上着想,最好是从其Parent Control ID开始调用。

通过字符串取得Enum 枚举的值

使用情形

我常用枚举值转换成字符串,例如:

 

但是当我从URL中取得searchMode的值时,却没有现成的函数让我将其转换成enum SearchMode的值。

解决方案

 

此函数直接支持大小写不一致时的问题。

应用

简单啦,直接

 

原创粉丝点击