En mi código hay varias cadenas que se utilizan como claves para acceder a los recursos. Estas claves tienen un formato específico, p.Comprobando el formato de cadena en tiempo de compilación en C#
string key = "ABC123";
En la actualidad, todas estas claves se almacenan como cadenas, pero me gustaría hacer las cosas más robusto y con seguridad de tipos. Idealmente, me gustaría comprobar que las cadenas estén en el formato correcto en el momento de la compilación.
La siguiente etapa es crear una clase ResourceKey que se inicializa a partir de una cadena. Luego puedo verificar el formato de la cadena en tiempo de ejecución, p.
ResourceKey key = "ABC123";
donde ResourceKey se define como:
using System.Diagnostics;
using System.Text.RegularExpressions;
class ResourceKey
{
public string Key { get; set; }
public static implicit operator ResourceKey (string s)
{
Debug.Assert(Regex.IsMatch(s, @"^[A-Z]{3}[0-9]{3}$"));
return new ResourceKey() { Key = s };
}
}
Lo que realmente me gustaría hacer es tener una especie de aserción de tiempo de compilación para que el programa no puede construir si alguien trata de usar una clave inválida p.ej.
ResourceKey k1 = "ABC123"; // compiles
ResourceKey k2 = "DEF456"; // compiles
ResourceKey k3 = "hello world"; // error at compile time
¿Hay alguna manera de lograr esto?
Gracias
Estoy de acuerdo en esto, sugieren también compruebe http://www.postsharp.org/ para hacer asegurar/después de la lógica – kentaromiura
Buena idea, pero desafortunadamente estas claves están distribuidas entre decenas de miles de líneas de código heredado, la gran mayoría no está cubierta por pruebas unitarias. ¡Aunque estamos llegando! – roomaroo
¡Lamento escuchar eso! –