Welcome

首页 / 软件开发 / C# / C#中使用扩展方法对调用进行验证

C#中使用扩展方法对调用进行验证2011-07-02利用C# 3.0提供的扩展方法技术,可以为已经编译好的程序集类型增加新的方法,从而应对新的扩展。除了在可扩展性方面所具有的优势之外,如果能够合理地结合泛型与类型推断,扩展方法还可以有效降低代码的重复,提高程序的可重用性。例如,这样的方法实现:

public class CustomerDAL{public IEnumerable<Customer> FindCustomers(string roleName){return from customerin context.Customer where customer.RoleName.Equals(roleName) select customer;}}
当方法返回的结果为null时,采用如下方式进行调用,就会抛出NullReferenceException异常:

Customer customer = new CustomerDAL().FindCustomers(Role.Admin).First();

我们需要对返回结果进行验证,如果返回为null,则可以抛出自定义异常,或者创建一个空对象,例如:

public IEnumerable<Customer> FindCustomers(string roleName){IEnumerable<Customer> customers = from customerin context.Customerwhere customer.RoleName.Equals(roleName)select customer;if (customers == null){throw new MyException("Cann"t find the customers.");}return customers;}
如果系统有许多方法都需要对返回结果进行验证,则这样的验证逻辑就会充斥在各个方法体中,既不利于重用,也会对未来的修改造成极大的阻碍。当然,我们可以引入Null Object模式来替代对null值的判断逻辑,但这种方式仍然需要为多种类型定义不同的Null Object类型。