50 votes

Est-il un GUID.TryParse ().NET 3.5?

Mise à JOUR

Guid.TryParse est disponible dans .NET 4.0

MISE À JOUR DE FIN

Évidemment, il n'y a pas de public GUID.TryParse ().NET CLR 2.0.

Donc, j'étais à la recherche dans les expressions régulières [aka googler pour trouver un] et à chaque fois j'ai trouvé un il y avait un argument de chauffage dans la section des commentaires sur Une RegEx ne fonctionne pas, utiliser des RegEx B. Alors quelqu'un voudrais écrire des Regex C yadda yadda

De toute façon, Ce que j'ai décidé de faire, c'était cela, mais je me sens mal à ce sujet.

public static bool IsGuid (string possibleGuid) {

    try {
      Guid gid = new Guid(possibleGuid);
      return true;    
    } catch (Exception ex) {
      return false;
    }
}

Évidemment, je n'aime pas vraiment ce depuis qu'il a été foré en moi depuis le premier jour, afin d'éviter de jeter des exceptions si vous pouvez defensibly code autour d'elle.

Personne ne sait pourquoi il n'y a pas de public Guid.TryParse() dans le .NET Framework?

Quelqu'un aurait-il une réelle Expression Régulière qui va travailler pour tous les Guid?

55voto

JaredPar Points 333733

Il n'y a pas de Guid.TryParse dans le CLR 2.0 et antérieures. Il sera disponible à partir de la CLR 4.0 et Visual Studio 2010.

Pourquoi il n'y avait pas. Ces types de questions sont généralement difficiles à répondre correctement. Le plus probable, c'est un oubli ou à une contrainte de temps question de. Si vous ouvrez mscorlib dans le réflecteur, vous verrez il y est en fait une méthode nommée TryParse sur Guid mais c'est privé. Il lance une exception, dans certains cas, il n'est donc pas un bon équivalent à dire Int32.TryParse.

19voto

Darin Dimitrov Points 528142

Guid.TryParse mise en œuvre à l'aide d'expressions régulières.

10voto

Partha Choudhury Points 394

IsGuid mis en œuvre en tant que méthode d'extension de chaîne...

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 guidPattern = new Regex(guidPattern);
   return guidPattern.IsMatch(stringValue);
}

9voto

Cette mise en œuvre d'un TryParse pour les Guid utilise un try-catch pour attraper missformed de Guid. Il est implémenté comme une extension de la méthode et doit être placé dans une classe statique:

public static bool TryParseGuid(this string s, out Guid guid)
{
    try {
        guid = new Guid(s);
        return true;
    } catch {
        guid = Guid.Empty;
        return false;
    }
}

Elle peut être appelée avec

string s = "{CA761232-ED42-11CE-BACD-00AA0057B223}";
Guid id;
if (s.TryParseGuid(out id) {
    // TODO: use id
} else {
    // Sorry not a valid Guid.
}

5voto

bdukes Points 54833

En termes de pourquoi il n'existe pas, c'est un oubli. Il y aura un Guid.TryParse .NET 4 (voir BCL blog pour plus de détails).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X