偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

請先看下面的代碼

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

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

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

我們需要對返回結果進行驗證,如果返回為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)有許多方法都需要對返回結果進行驗證,則這樣的驗證邏輯就會充斥在各個方法體中,既不利于重用,也會對未來的修改造成極大的阻礙。當然,我們可以引入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擴展方法可以應用到任何類型上,因此它可以在各種類型上重用非空驗證甚至是調用驗證。借鑒這一思想,我們還可以利用此方法默認實現(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擴展方法,可以安全地調用List的相關屬性和方法,例如Count屬性:

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

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

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

【編輯推薦】

  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-31 16:33:28

C#調用Dispose

2009-08-31 18:05:14

C#調用WalkTre

2009-08-20 13:47:57

C#驗證輸入方法

2021-01-28 05:14:40

C#接口簽名

2009-08-26 15:53:48

C#擴展方法

2009-08-18 14:14:45

C#擴展方法性能測試

2009-08-27 09:27:49

C#擴展方法

2009-08-27 16:24:48

擴展方法C# 3.0新特性

2009-08-03 12:57:27

C#調用DLL

2009-03-18 09:15:34

UndoRedoC#

2020-12-31 07:31:10

C# 反射數(shù)據

2009-09-11 10:59:06

Effective C調用Dispose()

2009-08-26 16:58:12

調用C# Thread

2009-08-05 09:40:02

C#調用DLL函數(shù)

2009-09-02 10:49:46

C#調用析構方法
點贊
收藏

51CTO技術棧公眾號