Guide.Parse () या नया गाइड () - क्या अंतर है?


79

स्ट्रिंग को परिवर्तित करने के इन दो तरीकों में क्या अंतर है System.Guid? क्या एक को दूसरे पर चुनने का कारण है?

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

या

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

6
क्या के संदर्भ में?
किरण

4
आप यह भी उपयोग कर सकते हैं: Guide.TryParse ()
पैट्रिक Desjardins

जवाबों:


90

रिफ्लेक्टर में एक त्वरित रूप से पता चलता है कि दोनों बहुत अधिक समकक्ष हैं।

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

जवाब के लिए धन्यवाद। मुझे वास्तव में "उनके काम करने के तरीके में अंतर है" की तलाश थी।
ब्रेनज़ून

ऐसा लगता है कि इस्तेमाल किए गए GuidParseThrowStyle में एक स्पष्ट अंतर है, इसलिए एक इनपुट के लिए एक त्रुटि फेंक सकता है जो अन्य नहीं करेगा।
त्रिनको

3
@ ट्रायनको: यदि आप कोड को देखते हैं, तो आप देखेंगे कि वे दोनों समान कारणों से फेंक देते हैं। अंतर केवल इतना है कि अगर OverflowExceptionफेंक दिया जाता है तो इसे एक FormatExceptionमामले में इनकैप्सुलेट किया जाएगा Guid.Parse
लूका क्रेमोनी

25

उस संस्करण का उपयोग करें जो आपके लिए सबसे अधिक पठनीय है। दोनों को लगभग उसी तरह लागू किया जाता है।

एकमात्र वास्तविक अंतर यह है कि निर्माणकर्ता Guid.Emptyपार्स का प्रयास करने से पहले खुद को प्रारंभ करता है । हालाँकि, प्रभावी कोड समान है।

यह कहा जा रहा है, अगर Guidउपयोगकर्ता इनपुट से आ रहा है, तो Guid.TryParseदोनों विकल्पों में से बेहतर होगा। यदि यह Guidहार्ड कोडित है, और हमेशा मान्य है, तो उपरोक्त में से कोई भी पूरी तरह से उचित विकल्प हैं।


13

मैंने एक मिलिटरी गाइड और गाइड पर प्रदर्शन की कोशिश की। पर्पस एक तुच्छ तेजी से लगता है। इसने मेरे पीसी पर कुल निर्माण के 800 से अधिक मील के अंतर को 10-20 मिलिसेकोड किया।

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

और आउटपुट:

नया गाइड (): 804 मि

गाइड.पार्स (): 791 एमएस


3
यह एक सांख्यिकीय महत्वपूर्ण बेंचमार्क नहीं है। मैंने इसे कई बार चलाया और अलग-अलग परिणाम मिले। पृष्ठभूमि शोर इन कार्यान्वयन में किसी भी संभावित प्रदर्शन अंतर को बादलों।
ब्रैड एम

1

मैं साथ जाता TryParse। यह एक अपवाद नहीं है।


29
मैं इस तरह के कारण पर विचार नहीं करूंगा। ऐसे परिदृश्य हैं जहाँ आप अपवाद और परिदृश्य चाहते हैं जहाँ आप नहीं हैं। यह परिदृश्य के आधार पर उपयुक्त विधि चुनने की बात है।
डर्क वोल्मार

एक db के साथ +1 जिसमें एक खाली स्ट्रिंग हो सकती है, यह गाइड को पार्स करने और गाइड प्राप्त करने का एक आसान तरीका है। स्ट्रिंग खाली है तो खाली करें।
ashes999

मैं @DirkVollmar से भी सहमत हूं कि यह खराब तर्क है। TryParseहर समय उपयोग करने से बड़े पैमाने पर समस्याएं और अमान्य कोड पथ होते हैं। यह Parseतब उपयोग करना पसंद किया जाता है जब आपको पता हो कि मान होना चाहिए Guidऔर यदि यह पूरी तरह से अमान्य परिदृश्य को संभालने और अपने कोड को अधिक जटिल और नाजुक बनाने की कोशिश नहीं करता है, तो तेजी से विफल हो सकता है ।
जुलैलेगॉन

-1

.Net फ्रेमवर्क v1.1 में केवल 1 तरीका मौजूद है -> var myguid = new Guide ("9546482E-887A-4CAB-A403-AD9C326FFDA5");

गाइड.पार्स बाद में उपलब्ध हो गया।


1
कृपया समाधान के साथ स्पष्टीकरण प्रदान करें ताकि उपयोगकर्ता को बेहतर समझ हो कि कोड क्या कर रहा है।
एंड्रयू रीज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.