Quelle est la différence entre ces deux façons de convertir une chaîne en System.Guid
? Y a-t-il une raison de choisir l'un plutôt que l'autre?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
ou
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
Un rapide coup d'œil dans le réflecteur révèle que les deux sont à peu près équivalents.
public Guid(string g)
{
if (g == null)
{
throw new ArgumentNullException("g");
}
this = Empty;
GuidResult result = new GuidResult();
result.Init(GuidParseThrowStyle.All);
if (!TryParseGuid(g, GuidStyles.Any, ref result))
{
throw result.GetGuidParseException();
}
this = result.parsedGuid;
}
public static Guid Parse(string input)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
GuidResult result = new GuidResult();
result.Init(GuidParseThrowStyle.AllButOverflow);
if (!TryParseGuid(input, GuidStyles.Any, ref result))
{
throw result.GetGuidParseException();
}
return result.parsedGuid;
}
Utilisez la version la plus lisible pour vous. Les deux sont implémentés presque exactement de la même manière.
La seule vraie différence est que le constructeur s'initialise sur Guid.Empty
avant de tenter l'analyse. Cependant, le code effectif est identique.
Cela étant dit, si le Guid
provient d'une entrée utilisateur, alors Guid.TryParse
serait mieux que l'une ou l'autre option. Si ce Guid
est codé en dur et toujours valide, l'une des options ci-dessus est parfaitement raisonnable.
J'ai essayé les performances sur un million de guides et Guid.Parse semble être un peu plus rapide. Cela a fait 10-20 millisecondes de différence de 800 millisecondes de création totale sur mon PC.
public class Program
{
public static void Main()
{
const int iterations = 1000 * 1000;
const string input = "63559BC0-1FEF-4158-968E-AE4B94974F8E";
var sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
new Guid(input);
}
sw.Stop();
Console.WriteLine("new Guid(): {0} ms", sw.ElapsedMilliseconds);
sw = Stopwatch.StartNew();
for (var i = 0; i < iterations; i++)
{
Guid.Parse(input);
}
sw.Stop();
Console.WriteLine("Guid.Parse(): {0} ms", sw.ElapsedMilliseconds);
}
}
Et sortie:
nouveau Guid (): 804 ms
Guid.Parse (): 791 ms
J'irais avec TryParse
. Cela ne fait pas exception.