c# - ¿Hay un GUID.TryParse() en.NET 3.5?
asp.net (8)
En términos de por qué no hay uno, es un descuido. Habrá un Guid.TryParse
en .NET 4 (consulte la publicación de blog de BCL para obtener más información).
ACTUALIZAR
Guid.TryParse está disponible en .NET 4.0
FINALIZAR ACTUALIZACIÓN
Obviamente, no existe un GUID público .TryParse () en .NET CLR 2.0.
Entonces, estaba buscando expresiones regulares [alias buscando en Google para encontrar una] y cada vez que encontraba una, había una acalorada discusión en la sección de comentarios sobre RegEx A no funciona, usa RegEx B. Entonces alguien escribiría Regex C yadda yadda
Entonces, de todos modos, lo que decidí hacer fue esto, pero me siento mal por eso.
public static bool IsGuid (string possibleGuid) {
try {
Guid gid = new Guid(possibleGuid);
return true;
} catch (Exception ex) {
return false;
}
}
Obviamente, realmente no me gusta esto, ya que me lo han recordado desde el primer día para evitar arrojar excepciones si es posible defender el código.
¿Alguien sabe por qué no existe un Guid.TryParse () público en .NET Framework?
¿Alguien tiene una expresión regular real que funcione para todos los GUID?
Esta implementación de un TryParse
for Guids usa un try-catch para capturar Guiones mal formados. Se implementa como método de extensión y debe colocarse en una clase estática:
public static bool TryParseGuid(this string s, out Guid guid)
{
try {
guid = new Guid(s);
return true;
} catch {
guid = Guid.Empty;
return false;
}
}
Se puede llamar con
string s = "{CA761232-ED42-11CE-BACD-00AA0057B223}";
Guid id;
if (s.TryParseGuid(out id) {
// TODO: use id
} else {
// Sorry not a valid Guid.
}
Comenzando con C # 7.0 / Visual Studio 2017, puede llamarlo con:
string s = "{CA761232-ED42-11CE-BACD-00AA0057B223}";
if (s.TryParseGuid(out Guid id) {
// TODO: use id
} else {
// Sorry not a valid Guid.
}
ACTUALIZAR
Desde Visual Studio 2010 / .NET Framework 4.0, System.Guid
proporciona un TryParse
y un método TryPareExact
.
Esto debería funcionar:
@"^/{?[0-9a-fA-F]{8}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{4}-?[0-9a-fA-F]{12}/}?$"
Implementación de Guid.TryParse utilizando expresiones regulares.
IsGuid implementado como método de extensión para cadena ...
public static bool IsGuid(this string stringValue)
{
string guidPattern = @"[a-fA-F0-9]{8}(/-[a-fA-F0-9]{4}){3}/-[a-fA-F0-9]{12}";
if(string.IsNullOrEmpty(stringValue))
return false;
Regex guidRegEx = new Regex(guidPattern);
return guidRegEx.IsMatch(stringValue);
}
No hay Guid.TryParse en CLR 2.0 y versiones anteriores. Estará disponible comenzando con CLR 4.0 y Visual Studio 2010.
En cuanto a por qué no había. Este tipo de preguntas suelen ser difíciles de responder correctamente. Lo más probable es que haya sido un problema de supervisión o de restricción de tiempo. Si abre mscorlib en reflector, verá que hay un método llamado TryParse en Guid
pero es privado. También arroja una excepción en ciertos casos, por lo que no es un buen equivalente a decir Int32.TryParse
.
No hay funcionalidad TryParse en .NET Framework que yo sepa en este momento. Tendrá que recurrir a RegEx o la opción try-catch. RegEx no es mi taza de té, así que estoy seguro de que alguien más publicará una respuesta.
Las excepciones son costosas en cuanto al rendimiento, por lo que mi voto va a la opción RegEx.
Puede escribir su propio TryParse como método de extensión para Guid. Luego, cuando aparece el ''real'' de MS, ya estás listo para ir y no tienes que cambiar.