成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#中使用擴展方法對調用進行驗證

開發 后端
利用C# 3.0提供的擴展方法技術,可以為已經編譯好的程序集類型增加新的方法,從而應對新的擴展。除了在可擴展性方面所具有的優勢之外,如果能夠合理地結合泛型與類型推斷,擴展方法還可以有效降低代碼的重復,提高程序的可重用性。

請先看下面的代碼

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

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

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

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

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;
}

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

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

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

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

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

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

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

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

   returnobj;
}

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

publicclassListObject
{
   publicList Foo()
   {
       returnnull;
   }
}

通過Instance擴展方法,可以安全地調用List的相關屬性和方法,例如Count屬性:

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

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

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

【編輯推薦】

  1. 詳解C#代碼文件生成擴展代碼文件
  2. 深入理解C# 3.0的五項主要改進
  3. 淺析C#編程中的內存管理
責任編輯:彭凡 來源: ITPUB個人空間
相關推薦

2009-09-01 11:04:59

C#調用擴展方法

2009-08-31 14:45:10

C#擴展方法

2009-08-10 17:36:17

C#擴展方法

2009-08-27 18:04:01

c#擴展方法string

2009-08-11 11:07:49

Java調用C# we

2009-08-20 13:47:57

C#驗證輸入方法

2009-08-31 16:33:28

C#調用Dispose

2009-08-31 18:05:14

C#調用WalkTre

2021-01-28 05:14:40

C#接口簽名

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2009-08-18 14:14:45

C#擴展方法性能測試

2009-08-26 15:53:48

C#擴展方法

2009-08-27 09:27:49

C#擴展方法

2009-08-03 12:57:27

C#調用DLL

2009-03-18 09:15:34

UndoRedoC#

2020-12-31 07:31:10

C# 反射數據

2009-09-02 10:49:46

C#調用析構方法

2009-08-05 09:40:02

C#調用DLL函數

2009-08-26 16:58:12

調用C# Thread

2009-08-05 09:30:39

C#調用DLL函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲综合大片69999 | 久久爱综合 | 午夜影院官网 | 日日操视频 | 欧美国产亚洲一区二区 | 免费毛片www com cn| 亚洲成人中文字幕 | 亚洲成人三级 | 中文字幕久久精品 | 欧美在线视频一区二区 | 国产乱码久久久久久 | 91网在线播放 | 国产一区二区三区四区 | 欧美日韩在线一区二区 | www网站在线观看 | 欧美一级二级视频 | 国产一区二区三区久久久久久久久 | 在线观看深夜视频 | 久久99一区二区 | 天天影视网天天综合色在线播放 | 玖玖视频网 | 在线免费观看黄色av | 国产精品久久久久久久久久东京 | 国产韩国精品一区二区三区 | 午夜一区二区三区在线观看 | 欧美理论 | 亚洲区一区二 | 羞羞视频网站在线观看 | 精品一区二区三区电影 | 欧美激情视频一区二区三区在线播放 | 国产欧美一区二区在线观看 | 最新日韩在线视频 | 天堂久| 国产精品成人一区二区三区吃奶 | 99国产精品99久久久久久粉嫩 | 国产在线激情视频 | aaaa一级毛片 | gogo肉体亚洲高清在线视 | 亚洲一区二区三区视频 | 在线视频国产一区 | 久久久久久久久久久91 |