av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

C#中使用擴展方法對調(diào)用進行驗證

請先看下面的代碼

創(chuàng)新互聯(lián)建站是一家專注于成都做網(wǎng)站、網(wǎng)站設計與策劃設計,達拉特網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設10多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:達拉特等地區(qū)。達拉特做網(wǎng)站價格咨詢:18980820575

{
   publicIEnumerable FindCustomers(stringroleName)
   {
       returnfrom customer
            incontext.Customer
             where customer.RoleName.Equals(roleName)
             select customer;
   }
}

當方法返回的結(jié)果為null時,采用如下方式進行調(diào)用,就會拋出NullReferenceException異常:

Customer customer =newCustomerDAL().FindCustomers(Role.Admin).First();

我們需要對返回結(jié)果進行驗證,如果返回為null,則可以拋出自定義異常,或者創(chuàng)建一個空對象,例如:

publicIEnumerable FindCustomers(stringroleName)
{
    IEnumerable customers = from customer
            incontext.Customer
             where customer.RoleName.Equals(roleName)
             select customer;
   if(customers ==null)
   {
       thrownewMyException("Cann't find the customers.");
   }
   returncustomers;
}

如果系統(tǒng)有許多方法都需要對返回結(jié)果進行驗證,則這樣的驗證邏輯就會充斥在各個方法體中,既不利于重用,也會對未來的修改造成極大的阻礙。當然,我們可以引入Null Object模式來替代對null值的判斷邏輯,但這種方式仍然需要為多種類型定義不同的Null Object類型。

Craig Andera在其博客文章中提出使用擴展方法對調(diào)用進行驗證。他寫道:NullReferenceException異常會拋出,但是我們希望有更具體的異常信息。因此,我們編寫了如下的擴展方法:

publicstaticT OrThrow(thisT obj, Exception e){
   if(obj ==null){
       throwe;
   }
   returnobj;
}
利用OrThrow擴展方法,則之前的調(diào)用方式可以修改為:

Customer customer =newCustomerDAL().FindCustomers(Role.Admin).OrThrow(newMyException

("Can't find Customer")).First();

OrThrow擴展方法對于你所要調(diào)用的類型而言是通用的,并且它返回了該類型,所以你可以將其插入到表達式鏈中,而不會丟失智能感應功能。并且因為類型推斷功能,實際上并不需要指定具體的類型。

也就是說,OrThrow擴展方法可以應用到任何類型上,因此它可以在各種類型上重用非空驗證甚至是調(diào)用驗證。借鑒這一思想,我們還可以利用此方法默認實現(xiàn)對象實例的創(chuàng)建,以避免拋出NullReferenceException異常,例如:

publicstaticT Instance(thisT obj) where T:new()
{
   if(obj ==null)
   {
        bj =newT();
   }

   returnobj;
}

由于Instance擴展方法中的類型參數(shù)T需要創(chuàng)建實例,因此必須添加new()約束。所以該擴展方法存在一定的局限,例如無法應用在之前的IEnumerable類型上。但對于如下的方法卻非常有效:

publicclassListObject
{
   publicList Foo()
   {
       returnnull;
   }
}

通過Instance擴展方法,可以安全地調(diào)用List的相關(guān)屬性和方法,例如Count屬性:

Console.WriteLine(newListObject().Foo().Instance().Count);

控制臺打印出來的結(jié)果為0。如果沒有Instance擴展方法,則會拋出NullReferenceException異常。

作為C# 3.0增加的新特性,擴展方法在大量項目中得到了廣泛地應用,但絕不僅僅是提高可擴展性這么簡單。在進行項目開發(fā)時,若能適當?shù)乜紤]使用擴展方法,說不定會帶來出奇制勝的效果。


分享名稱:C#中使用擴展方法對調(diào)用進行驗證
鏈接URL:http://uogjgqi.cn/article/cdjdisc.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流