2008-11-18 83 views
14

我正在尋找一個庫或源代碼,它提供了諸如檢查空參數之類的守護方法。很明顯,這是相當簡單的構建,但我想知道是否有任何.NET的。基本的谷歌搜索沒有透露太多。.NET Guard類庫?

回答

11

CuttingEdge.Conditions。從頁面用例:

public ICollection GetData(Nullable<int> id, string xml, ICollection col) 
{ 
    // Check all preconditions: 
    id.Requires("id") 
     .IsNotNull()   // throws ArgumentNullException on failure 
     .IsInRange(1, 999) // ArgumentOutOfRangeException on failure 
     .IsNotEqualTo(128); // throws ArgumentException on failure 

    xml.Requires("xml") 
     .StartsWith("<data>") // throws ArgumentException on failure 
     .EndsWith("</data>"); // throws ArgumentException on failure 

    col.Requires("col") 
     .IsNotNull()   // throws ArgumentNullException on failure 
     .IsEmpty();   // throws ArgumentException on failure 

    // Do some work 

    // Example: Call a method that should not return null 
    object result = BuildResults(xml, col); 

    // Check all postconditions: 
    result.Ensures("result") 
     .IsOfType(typeof(ICollection)); // throws PostconditionException on failure 

    return (ICollection)result; 
} 

另外一個不錯的方法,這是不是在一個庫包裝,但可以很容易地,on Paint.Net blog

public static void Copy<T>(T[] dst, long dstOffset, T[] src, long srcOffset, long length) 
{ 
    Validate.Begin() 
      .IsNotNull(dst, "dst") 
      .IsNotNull(src, "src") 
      .Check() 
      .IsPositive(length) 
      .IsIndexInRange(dst, dstOffset, "dstOffset") 
      .IsIndexInRange(dst, dstOffset + length, "dstOffset + length") 
      .IsIndexInRange(src, srcOffset, "srcOffset") 
      .IsIndexInRange(src, srcOffset + length, "srcOffset + length") 
      .Check(); 

    for (int di = dstOffset; di < dstOffset + length; ++di) 
     dst[di] = src[di - dstOffset + srcOffset]; 
} 

我用它在my project,你可以借代碼從那裏。

+0

我將此標記爲公認的答案,因爲它確實符合我的需求。 – 2011-04-21 03:42:00

8

鑑於微軟的Code Contracts與.NET 4.0問世,如果可能的話,我會盡量找到一個兼容的,如果沒有的話,自己寫。當你升級到.NET 4.0時(最終),遷移將變得更加容易。

1

我最近寫了一篇關於警衛班後(已沒有發現任何信息其一):http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/

我還出版了各保護類的實現(隨意直接使用這些代碼,或將其調整到您的需求):ajdotnet.wordpress.com/guard-class/

關於.NET 4.0中Guard類和代碼契約之間的關係(Spec#的後繼者),請看下面的帖子:www.leading -edge-dev.de/?p=438

(遺憾的是分段鏈接,網站只允許一個鏈接...)

HIH, AJ.NET

0

安裝netfx-guard nuget包。您還會得到代碼片段notnull和notempty,它的執行速度與您的手動檢查一樣快。