在我們寫程式的時候,經常會需要判斷資料的是空值還是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));