2008-12-08 17 views

Antwort

237
new Guid(string) 

könnten Sie sehen auch eine TypeConverter bei Verwendung.

+3

Insbesondere gesetzt, ein GUIDConverter, die eingebaut ist. Http://msdn.microsoft.com/en -us/library/system.componentmodel.guidconverter.aspx –

+2

TypeDescriptor.GetConverter (typeof (Guid)) – leppie

+0

@leppie können Sie mir sagen, die Vor- und Nachteile der Verwendung von GUID als String anstatt dann als DataTyps GUID – cracker

3

Leider gibt es kein TryParse() - Äquivalent. Wenn Sie eine neue Instanz einer System.Guid erstellen und den Zeichenfolgenwert übergeben, können Sie die drei möglichen Ausnahmen abfangen, die bei ungültigem Wert ausgegeben würden.

Das sind:

  • Argument
  • Format
  • Overflow

ich einige Implementierungen gesehen haben, wo Sie vor einem regulären Ausdruck auf der Saite tun, um die Instanz zu erstellen, wenn Sie versuchen nur, es zu validieren und nicht zu erstellen.

8

Das wird dir ziemlich nah, und ich benutze es in der Produktion und hatte noch nie eine Kollision. Wenn Sie sich jedoch den Konstruktor für eine GUID in Reflector ansehen, werden Sie alle durchgeführten Prüfungen sehen.

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

Dieser Regex passt auf "92841CDF-734C-46b4-A40C-53B8B59947AA} "Das ist wegen fehlender Klammer ungültig. Wer weiß, wie man diese Regex für diesen Fall nicht anpassen kann? – Maggie

+0

@Maggie du könntest die Regex, einmal mit den Klammern, einmal ohne duplizieren - so ist es entweder/oder. – Sean

0

Wenn alles, was Sie wollen, einige sehr grundlegende Fehlerprüfung ist, können Sie einfach die Länge der Zeichenfolge überprüfen. (? Oder 3,5)

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

Verwendung Code wie folgt:

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

statt "9D2B0228-4D0D-4C23-8B49-01A698857709" Sie String-Wert

Verwandte Themen