Estoy buscando una biblioteca o código fuente que proporcione métodos de protección, como la comprobación de argumentos nulos. Obviamente, esto es bastante simple de construir, pero me pregunto si ya hay algo para .NET. Una búsqueda básica de Google no reveló mucho..NET Guard Class Library?
Respuesta
No es CuttingEdge.Conditions. Ejemplo de uso de la página:
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;
}
Otro enfoque agradable, que no está envasado en una biblioteca, pero podría ser fácilmente, 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];
}
lo uso en my project y se podía tomar prestado el código desde allí.
Dado el Code Contracts de Microsoft que sale con .NET 4.0 Intentaré encontrar uno que sea más compatible, si es posible, y si no, escríbalo usted mismo. De esta forma, cuando actualice a .NET 4.0 (eventualmente) la migración será más fácil.
Existen varios métodos que puede utilizar.
Mi favorito es el uso de programación orientada a aspectos. Echa un vistazo a PostSharp.
También puede echar un vistazo a SpeC#, una extensión de C#
En 4.0, tendrá una biblioteca contrato con todas las funciones.
Por último, un colega mío ha llegado con una biblioteca de guardia bastante útil: http://blueonionsoftware.com/blog.aspx?p=ca49cb62-7ea2-43c5-96aa-91d11774fb48
no sé de ninguno que están disponibles comercialmente. Existe algún tipo de soporte para este tipo de código en los patrones & prácticas Enterprise Library. También hay muchos proyectos de código abierto que parecen hacer esto también (en diversos grados) en CodePlex: http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=validation.
La mayoría de las veces, este tipo de bibliotecas terminan siendo escritas a medida y se mantienen internas a la compañía que las usa.
Hay compatibilidad en .NET 4.0 para proporcionar mecanismos para hacer esto usando Code Contracts, que se basan en SpeC#.
Hace poco escribí un post acerca de las clases de guardia (no haber encontrado ninguna información tampoco): http://ajdotnet.wordpress.com/2009/08/01/posting-guards-guard-classes-explained/
También publicó una aplicación respectiva clase Guardia (no dude en utilizar este código como es, o para ajustarla a su necesidades): ajdotnet.wordpress.com/guard-class/
Con respecto a la relación entre las clases Guard y Code Contract en .NET 4.0 (sucesor de SpeC#), eche un vistazo a la siguiente publicación: www.leading -edge-dev.de/?p=438
(disculpe los enlaces fragmentados, el sitio solo permite uno enlace ...)
HIH, AJ.NET
Instale el paquete nuget netfx-guard.También obtienes fragmentos de código notnull y notempty, y funciona tan rápido como tus verificaciones manuales
- 1. UserControls in Class Library
- 2. Recuperar AssemblyCompanyName de Class Library
- 3. WCF Service Library contra Class Library tipos de proyecto
- 4. Portable Class Library (PCL) Contrib - Criptografía
- 5. Class :: DBI-like library for php?
- 6. Packaging ResourceDictionary para Silverlight Class Library
- 7. .Net FTP Library
- 8. .NET File Sync Library
- 9. OpenSource .net SMS library
- 10. C# /. NET scripting library
- 11. .NET Geometry Library
- 12. ¿Exactamente qué tan grande es la .NET (3.5) Framework Class Library?
- 13. guard desugaring
- 14. Refactoring Guard Clauses
- 15. .NET Class Loader - ¿Qué es?
- 16. .NET 4 Task Class Tutorial
- 17. Subproceso de almacenamiento local para C# Class Library
- 18. ¿Cómo trabajar con Portable Class Library y EF Code-first?
- 19. .net 4.0 Task Parallel Library vs. MPI.NET
- 20. Open Source Proxy Library para .Net
- 21. .NET units class, pulgadas a milímetros
- 22. LiveReload no funciona Guard (Firefox)
- 23. ASP.NET Cache class vs. MemoryCache class
- 24. .NET C# library para la reescritura Exif sin pérdida?
- 25. WITSML api library for .Net/C# client applications?
- 26. Un proyecto con un tipo de salida de Class Library no se puede iniciar directamente
- 27. "Un proyecto con un tipo de salida de Class Library no se puede iniciar directamente"
- 28. C# Telnet Library
- 29. ¿Es imposible usar Guard con RubyMine?
- 30. Decode un PHP codificado con 'zend guard'
Estoy marcando esto como la respuesta aceptada porque sin duda se ajusta a mis necesidades. –