102 votes

Guid.Parse() ou new Guid() - Quelle est la différence ?

Quelle est la différence entre ces deux façons de convertir une chaîne de caractères 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");

o

var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");

109voto

Jakub Konecki Points 28852

Un rapide coup d'œil dans le Reflector 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;
}

33voto

Reed Copsey Points 315315

Utilisez la version qui est la plus lisible pour vous. Les deux sont implémentées presque exactement de la même manière.

La seule différence réelle est que le constructeur s'initialise à Guid.Empty avant de tenter l'analyse. Cependant, le code effectif est identique.

Ceci étant dit, si le Guid provient de l'entrée de l'utilisateur, alors Guid.TryParse serait préférable à l'une ou l'autre des options. Si cette Guid est codée en dur, et toujours valide, l'une ou l'autre des options ci-dessus est parfaitement raisonnable.

13voto

tom.maruska Points 142

J'ai testé les performances sur un million de guids et Guid.Parse semble être insignifiamment plus rapide. Cela a fait une différence de 10-20 milisecondes sur 800 milisecondes 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 la sortie :

new Guid() : 804 ms

Guid.Parse() : 791 ms

1voto

Daniel A. White Points 91889

Je choisirais TryParse . Il ne lève pas d'exception.

0voto

Vasea Points 2475

Si vous utilisez .NET 4, alors Guid.TryParse est meilleur. Je ne pense pas qu'il y ait une grande différence entre Guid.Parse y new Guid

http://msdn.microsoft.com/en-us/library/system.guid.tryparse.aspx

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