स्ट्रिंग को परिवर्तित करने के इन दो तरीकों में क्या अंतर है System.Guid
? क्या एक को दूसरे पर चुनने का कारण है?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
या
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
स्ट्रिंग को परिवर्तित करने के इन दो तरीकों में क्या अंतर है System.Guid
? क्या एक को दूसरे पर चुनने का कारण है?
var myguid = Guid.Parse("9546482E-887A-4CAB-A403-AD9C326FFDA5");
या
var myguid = new Guid("9546482E-887A-4CAB-A403-AD9C326FFDA5");
जवाबों:
रिफ्लेक्टर में एक त्वरित रूप से पता चलता है कि दोनों बहुत अधिक समकक्ष हैं।
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;
}
OverflowException
फेंक दिया जाता है तो इसे एक FormatException
मामले में इनकैप्सुलेट किया जाएगा Guid.Parse
।
उस संस्करण का उपयोग करें जो आपके लिए सबसे अधिक पठनीय है। दोनों को लगभग उसी तरह लागू किया जाता है।
एकमात्र वास्तविक अंतर यह है कि निर्माणकर्ता Guid.Empty
पार्स का प्रयास करने से पहले खुद को प्रारंभ करता है । हालाँकि, प्रभावी कोड समान है।
यह कहा जा रहा है, अगर Guid
उपयोगकर्ता इनपुट से आ रहा है, तो Guid.TryParse
दोनों विकल्पों में से बेहतर होगा। यदि यह Guid
हार्ड कोडित है, और हमेशा मान्य है, तो उपरोक्त में से कोई भी पूरी तरह से उचित विकल्प हैं।
मैंने एक मिलिटरी गाइड और गाइड पर प्रदर्शन की कोशिश की। पर्पस एक तुच्छ तेजी से लगता है। इसने मेरे पीसी पर कुल निर्माण के 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 एमएस
मैं साथ जाता TryParse
। यह एक अपवाद नहीं है।
TryParse
हर समय उपयोग करने से बड़े पैमाने पर समस्याएं और अमान्य कोड पथ होते हैं। यह Parse
तब उपयोग करना पसंद किया जाता है जब आपको पता हो कि मान होना चाहिए Guid
और यदि यह पूरी तरह से अमान्य परिदृश्य को संभालने और अपने कोड को अधिक जटिल और नाजुक बनाने की कोशिश नहीं करता है, तो तेजी से विफल हो सकता है ।
.Net फ्रेमवर्क v1.1 में केवल 1 तरीका मौजूद है -> var myguid = new Guide ("9546482E-887A-4CAB-A403-AD9C326FFDA5");
गाइड.पार्स बाद में उपलब्ध हो गया।