2008-12-08 18 views
122

No encontré el método TryParse para el Guid. Me pregunto cómo otros se encargan de convertir un guid en formato de cadena en un tipo de guía.Cómo intentar convertir una cadena a un Guid

Guid Id; 
try 
{ 
    Id = new Guid(Request.QueryString["id"]); 
} 
catch 
{ 
    Id = Guid.Empty; 
} 

Respuesta

237
new Guid(string) 

También puede buscar en el uso de un TypeConverter.

+3

En concreto, un GUIDConverter, que se construye en. Http://msdn.microsoft.com/en -us/library/system.componentmodel.guidconverter.aspx –

+2

TypeDescriptor.GetConverter (typeof (Guid)) – leppie

+0

@leppie ¿Puede decirme los pros y los contras de usar GUID como cadena en lugar de usar como GUIA de DataTyps – cracker

3

Lamentablemente, no hay un equivalente TryParse(). Si crea una nueva instancia de un System.Guid y pasa el valor de la cadena, puede capturar las tres posibles excepciones que arrojaría si no es válida.

Esos son:

  • ArgumentNullException
  • FormatException
  • OverflowException

he visto algunas implementaciones donde se puede hacer una expresión regular en la cuerda antes de la creación de la instancia, si solo estamos tratando de validarlo y no crearlo.

8

Esto lo acercará bastante, y lo uso en producción y nunca he tenido una colisión. Sin embargo, si miras al constructor para obtener un guid en reflector, verás todas las comprobaciones que hace.

public static bool GuidTryParse(string s, out Guid result) 
    { 
     if (!String.IsNullOrEmpty(s) && guidRegEx.IsMatch(s)) 
     { 
      result = new Guid(s); 
      return true; 
     } 

     result = default(Guid); 
     return false; 
    } 

    static Regex guidRegEx = new Regex("^[A-Fa-f0-9]{32}$|" + 
          "^({|\\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\\))?$|" + 
          "^({)?[0xA-Fa-f0-9]{3,10}(, {0,1}[0xA-Fa-f0-9]{3,6}){2}, {0,1}({)([0xA-Fa-f0-9]{3,4}, {0,1}){7}[0xA-Fa-f0-9]{3,4}(}})$", RegexOptions.Compiled); 
+0

Esta expresión regular coincide con "92841CDF-734C-46b4-A40C-53B8B59947AA} "que no es válido porque falta el paréntesis". ¿Alguien sabe una forma de cambiar esta expresión regular para que no coincida con este caso? – Maggie

+0

@Maggie puede duplicar la expresión regular, una vez con los corchetes, una vez sin - por lo que es/o. – Sean

0

Si lo que quieres es un poco de comprobación de errores muy básico, sólo podría comprueba la longitud de la cadena. (? O 3,5)

   string guidStr = ""; 
       if(guidStr.Length == Guid.Empty.ToString().Length) 
       Guid g = new Guid(guidStr); 
74

utilice un código como este:

new Guid("9D2B0228-4D0D-4C23-8B49-01A698857709") 

en lugar de "9D2B0228-4D0D-4C23-8B49-01A698857709" se puede establecer su valor de cadena