我正在尋找一個庫或源代碼,它提供了諸如檢查空參數之類的守護方法。很明顯,這是相當簡單的構建,但我想知道是否有任何.NET的。基本的谷歌搜索沒有透露太多。.NET Guard類庫?
回答
有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,你可以借代碼從那裏。
鑑於微軟的Code Contracts與.NET 4.0問世,如果可能的話,我會盡量找到一個兼容的,如果沒有的話,自己寫。當你升級到.NET 4.0時(最終),遷移將變得更加容易。
有幾種方法可以使用。
我最喜歡的是使用Aspect Oriented Programming。退房PostSharp。
您還可以看看規格#,延伸到C#
在4.0中,你將有一個全功能的合同庫。
最後,我的一個collegue想出了一個非常有用的後衛庫: http://blueonionsoftware.com/blog.aspx?p=ca49cb62-7ea2-43c5-96aa-91d11774fb48
我不知道有什麼可購得。這種類型的代碼在&模式下對企業庫有一些支持。在CodePlex上也有很多開源項目可以做到這一點(不同程度):http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation。
大多數情況下,這些類型的庫最終都是自定義編寫的,並停留在使用它們的公司內部。
.NET 4.0中提供了對基於Spec#的Code Contracts的支持機制。
我最近寫了一篇關於警衛班後(已沒有發現任何信息其一):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
安裝netfx-guard nuget包。您還會得到代碼片段notnull和notempty,它的執行速度與您的手動檢查一樣快。
- 1. 錯誤 - 無法加載'guard/rails-assets'或''查找類Guard :: RailsAssets(Rails 4/zeus/guard)
- 2. VB .net類庫
- 3. .NET Framework 4.6.2中的目標.NET核心類庫類庫
- 4. Polidea/ios-class-guard - 安裝庫出錯
- 5. VB .NET(.NET 2.0)類庫配置
- 6. 的.NET Framework 4.6類庫.NET的核心
- 7. 如何擴展Laravel的Auth Guard類?
- 8. VBA - 使用.NET類庫
- 9. 類庫編譯.DLL .NET
- 10. 裝配VS類庫(.NET)
- 11. 類庫.NET標準和mscorlib.dll
- 12. .NET類庫中支持WriteFileGather
- 13. SerializationException在LoadFrom'ed .NET類庫
- 14. VB調用.NET類庫(dll)
- 15. .Net共享類庫配置
- 16. .NET合併類庫引用
- 17. .NET類庫DLL刷新
- 18. Data Guard Oracle 11g
- 19. Better Guard(Spork/RSpec)
- 20. Symfony 3,Guard&Handlers
- 21. canactivate guard angular 2
- 22. Monotouch-Enable Guard Malloc
- 23. Spork and Guard EADDRINUSE
- 24. typescript generic type guard
- 25. 問題,而在標準的.Net類庫引用.net庫中
- 26. gruntjs vs yeoman vs guard
- 27. Angular 2 Route Guard Confiability
- 28. 參考.NET類庫的有用的Silverlight類庫
- 29. 從.NET類庫中加載類庫中的資源
- 30. 類庫和.NET核心類庫模板有什麼區別?
我將此標記爲公認的答案,因爲它確實符合我的需求。 – 2011-04-21 03:42:00