基於Ardalis.GuardClauses守衛元件的擴充

又見阿郎發表於2018-07-14

在我們寫程式的時候,經常會需要判斷資料的是空值還是null值,基本上十個方法函式,八個要做這樣的判斷,因此我們很有必要擴充出來一個類來做監控,在這裡我們使用一個簡單地,可擴充的第三方元件:Ardalis.GuardClauses

在這裡首先提一點,一般我們的一旦給一個實體類或者集合類初始化了之後,其值將不會是Null,示例:

List<Blog> Blogs = new List<Blog>(); 
或是 
Blog Blog = new Blog();

這兩個變數都不是null,而是有地址的一個記憶體塊了,但是由於我們沒有賦值操作,其Count屬性就是0了。

我們在Nuget中引入第三方元件Ardalis.GuardClauses。然後看看怎麼使用,首先是最簡單的string型別:

string SessionStr = HttpContext.Session.GetString("username"); 
Guard.Against.NullOrEmpty(SessionStr, nameof(SessionStr));

我們可以去看看這個元件的原始碼或者如何使用。這是最簡單的。那麼我們如果需要判斷一個實體型別或者是集合型別應該怎麼辦?我們就自己擴充:
首先定義一個我們自己的異常類(當然你可以使用官方基於Exception類的擴充):

public class BlogExceptions : Exception 
{ 
 public BlogExceptions(string paramName) : base(string.Format("ParamName: {0} is null or empty", paramName)) 
 { 
 } 
 
 protected BlogExceptions(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) : base(info, context) 
 { 
 } 
 
 public BlogExceptions(string message, Exception innerException) : base(message, innerException) 
 { 
 } 
}

關於Exception類的建構函式的使用,我們可以參考:
https://msdn.microsoft.com/zh-cn/library/system.exception.aspx
定義一個類GuardExtensions,但是這個類的名稱空間最好要是Ardalis.GuardClauses,接下來基於既定的介面寫擴充方法:

public static void NullOrEmptyBlog(this IGuardClause guardClause, List<Blog> blog, string paramName) 
{ 
 if(blog == null || blog.Count==0) 
 { 
 throw new BlogExceptions(paramName); 
 } 
}

最後呼叫就完事了:

List<Blog> Blogs = _context.Blogs.ToList(); 
Guard.Against.NullOrEmptyBlog(Blogs, nameof(Blogs));

相關文章