идентификатор GUID.Parse () или new Guid () - какая разница?



в чем разница между этими двумя способами преобразования строки в System.Guid? Есть причина, чтобы выбрать один над другим?



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


или



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

4 ответов:

быстрый взгляд на отражатель показывает, что оба они в значительной степени эквивалентны.

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;
}

используйте версию, которая является наиболее читаемой для вас. Оба они реализованы почти точно так же.

единственное реальное различие заключается в том, что конструктор инициализирует себя в Guid.Empty перед попыткой разбора. Однако эффективный код идентичен.

это, как говорится, если Guid исходит из пользовательского ввода, затем Guid.TryParse было бы лучше, чем любой из вариантов. Если это Guid жестко закодирован и всегда действителен, любой из вышеперечисленных отлично разумные варианты.

я попробовал производительность на одном миллионе GUID и Guid.Разбор вроде бы несущественно быстрее. Это составило 10-20 милисекодов разница в 800 миллисекунд от общего создания на моем ПК.

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);
    }
}

и выход:

новый Guid (): 804 ms

Guid.Parse (): 791 ms

Я бы поехал с TryParse. Это не вызывает исключения.

Comments

    Ничего не найдено.