मैं एक स्ट्रिंग को एक गाइड में बदलने की कोशिश करना चाहता हूं, लेकिन मैं अपवादों को पकड़ने पर भरोसा नहीं करना चाहता (
- प्रदर्शन के कारणों के लिए - अपवाद महंगे हैं
- प्रयोज्य कारणों के लिए - डिबगर पॉप अप करता है
- डिजाइन कारणों के लिए - अपेक्षित असाधारण नहीं है
दूसरे शब्दों में कोड:
public static Boolean TryStrToGuid(String s, out Guid value)
{
try
{
value = new Guid(s);
return true;
}
catch (FormatException)
{
value = Guid.Empty;
return false;
}
}
उपयुक्त नहीं है।
मैं RegEx का उपयोग करने की कोशिश करूंगा, लेकिन चूंकि गाइड कोष्ठक लपेटा जा सकता है, ब्रेस लिपटे, कोई भी लिपटे नहीं, यह कठिन बनाता है।
इसके अतिरिक्त, मुझे लगा कि कुछ दिशानिर्देश मान अमान्य हैं (?)
अपडेट १
क्रिश्चियनके को FormatException
सभी के बजाय केवल पकड़ने का एक अच्छा विचार था । सुझाव शामिल करने के लिए प्रश्न का कोड नमूना बदल दिया।
अपडेट २
फेक अपवादों की चिंता क्यों? क्या मैं वास्तव में उन सभी के बारे में अवैध GUIDs की उम्मीद कर रहा हूँ?
जवाब है हां । यही कारण है कि मैं TryStrToGuid का उपयोग कर रहा हूं - मैं खराब डेटा की उम्मीद कर रहा हूं ।
उदाहरण 1 नामस्थान एक्सटेंशनों को GUID को फ़ोल्डर नाम में जोड़कर निर्दिष्ट किया जा सकता है । मैं फ़ोल्डर नामों को पार्स कर रहा हूं, यह देखने के लिए कि क्या अंतिम के बाद पाठ है । एक गाइड है।
c:\Program Files
c:\Program Files.old
c:\Users
c:\Users.old
c:\UserManager.{CE7F5AA5-6832-43FE-BAE1-80D14CD8F666}
c:\Windows
c:\Windows.old
उदाहरण 2 मैं एक भारी उपयोग किया जा रहा वेब-सर्वर कुछ पोस्ट किए गए डेटा की वैधता की जांच करना चाहता हूं। मैं अवैध डेटा को संसाधनों को बांधने के लिए नहीं चाहता हूँ 2-3 परिमाण के ऑर्डर इससे अधिक होने चाहिए।
उदाहरण 3 मैं एक उपयोगकर्ता द्वारा दर्ज की गई खोज अभिव्यक्ति को पार्स कर सकता हूं।
यदि वे GUID में प्रवेश करते हैं, तो मैं उन्हें विशेष रूप से संसाधित करना चाहता हूं (जैसे कि विशेष रूप से उस वस्तु को खोजना, या प्रतिक्रिया पाठ में उस विशिष्ट खोज शब्द को हाइलाइट करना और प्रारूपित करना।)
अद्यतन 3 - प्रदर्शन बेंचमार्क
टेस्ट 10,000 अच्छे दोस्तों और 10,000 बुरे दोस्तों को परिवर्तित करता है।
Catch FormatException:
10,000 good: 63,668 ticks
10,000 bad: 6,435,609 ticks
Regex Pre-Screen with try-catch:
10,000 good: 637,633 ticks
10,000 bad: 717,894 ticks
COM Interop CLSIDFromString
10,000 good: 126,120 ticks
10,000 bad: 23,134 ticks
पीएस मुझे एक सवाल का औचित्य साबित नहीं करना चाहिए।
4.0
। यही कारण है कि सवाल, और स्वीकृत उत्तर, वे जिस तरह से हैं।