Est-il un GUID.TryParse() dans .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() dans .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 a une réelle Expression Régulière qui va travailler pour tous les Guid?
- Le try catch technique peut être mauvais si cette méthode est appelée lots (dans une boucle) et il est fort probablement de l'exception levée. Une fois, j'ai dressé le portrait d'une ASP.NET 1.1 application qui a fait ceci et après la mise à niveau vers .NET 2.0 est de type int.TryParse, la performance a augmenté de près de 30% (il était en train de faire beaucoup de int.Analyser les appels!).
- Ouais, ce ne sera pas une boucle. Fondamentalement, j'ai été faire des erreurs, de la "echec de la conversion de type uniqueidentifier" etc.. donc je voulais faire quelque chose de plus que de simplement vérifier si la chaîne est passé était vide ou non.
- string Id = Guid.NewGuid().ToString();
Vous devez vous connecter pour publier un commentaire.
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 à direInt32.TryParse
.Guid.TryParse mise en œuvre à l'aide d'expressions régulières.
"{CA761232-ED42-11CE-BACD-00AA0057B223)"
est un bon GUID. (Note incorrecte du support.) Dans ce cas, la méthode lève une exception lorsqu'il essaie de créer unGuid
.IsGuid mis en œuvre en tant que méthode d'extension de chaîne...
string guidPattern = @"^[a-fA-F0-9]{8}(\-[a-fA-F0-9]{4}){3}\-[a-fA-F0-9]{12}$";
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:Elle peut être appelée avec
À partir de C# 7.0 /Visual Studio 2017, vous pouvez l'appeler avec:
Mise à JOUR
Depuis Visual Studio 2010 /.NET Framework 4.0,
System.Guid
fournit unTryParse
et unTryPareExact
méthode.En termes de pourquoi il n'existe pas, c'est un oubli. Il y aura un
Guid.TryParse
dans .NET 4 (voir BCL post de blog pour plus de détails).Il n'y a pas TryParse fonctionnalité dans le .NET Framework à ma connaissance à ce moment. Vous pourrez avoir recours à des RegEx ou le try-catch option. RegEx n'est pas ma tasse de thé, donc je suis sûr que quelqu'un va poster une réponse.
Exceptions sont coûteux performance sage, donc mon vote va à la RegEx option.
Cela devrait fonctionner:
Guid(string)
, les traits d'union sont facultatifs.Vous pouvez écrire votre propre TryParse comme une extension de la méthode de Guid. Puis, quand le "réel", l'un de MME, votre déjà bon pour aller et ne pas avoir à changer.
Guid
exemple, et la version de framework sera statique.