扩展方法,是.NET 3.5中引入的新特性,在《扩展方法使用小结中》,我有具体的介绍。合理的使用扩展方法,能节约不少的代码量,甚至能在开发中给我们带来意想不到的效果,让代码更加的简洁、易懂。其实,网上早就有了不少的大牛写的各种出色的扩展方法,以至于我有了整理一个扩展方法库的想法,把一些实用、优秀的扩展方法收集起来,一来为资源共享,二来也是为了应用在以后的项目代码中,提高开发效率。
1.Foreach方法 首先上场的是Foreach,在使用Linq的时候,太容易派上用场了。比如,在使用Linq to Sql查询后,我们常常需要遍历结果,然后输出,代码如下:
DataClassDataContext ctx = new DataClassDataContext();
var result = ctx.Products.Where(p => p.ProductID >= 10);
foreach (var product in result)
{
Console.WriteLine(product.ProductName);
}
自从有了Foreach,可以节省不少的力气了:
DataClassDataContext ctx = new DataClassDataContext();
ctx.Products.Where(p => p.ProductID >= 10).ForEach(p => Console.WriteLine(p.ProductName));
Foreach代码如下:
public static void ForEach (this IEnumerable source, Action action)
{
foreach(var item in source)
{
action(item);
}
}
2.In方法 判断某个类型的变量是否在一个序列中
string [] names = new string[] {"Andy", "Timothy", "Ben", "Rex", "Ven", "Ken"};
if(names.Contains("Timothy"))
{
Console.WriteLine("Found!");
}
使用In方法:
if ("Timothy".In("Andy", "Timothy", "Ben", "Rex", "Ven", "Ken"))
{
Console.WriteLine("Found!");
}
In方法代码如下:
public static bool (this T t, params T[] c)
{
return c.Contains(t);
}
3.WinForm下的控件选择器(摘自 博客园-鹤冲天 的博客 http://www.cnblogs.com/ldp615/archive/2009/11/08/1598596.html)
public static IEnumerable GetControls(this Control control, Func filter) where T : Control
{
foreach (Control c in control.Controls)
{
if (c is T&&(filter == null||filter(c as T)))
{
yield return c as T;
}
foreach (T _t in GetControls(c, filter))
yield return _t;
}
}
使用方法:
this.GetControls<button>(null).ForEach(b => b.Enabled = false); //禁用界面上所有Button控件
</button>