public class CustomerDAL { public IEnumerable<Customer> FindCustomers(string roleName) { return from customer in 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 customer in context.Customer where customer.RoleName.Equals(roleName) select customer; if (customers == null) { throw new MyException("Cann't find the customers."); } return customers; }
如果系統有許多方法都需要對返回結果進行驗證,則這樣的驗證邏輯就會充斥在各個方法體中,既不利於重用,也會對未來的修改造成極大的阻礙。當然,我們可以引入Null Object模式來替代對null值的判斷邏輯,但這種方式仍然需要為多種類型定義不同的Null Object類型。