मैं StringComparison.OrdinalIgnoreCase
का उपयोग कर यूआरएल पथों का परीक्षण करने के लिए स्ट्रिंग तुलना का उपयोग कर रहा हूं।स्ट्रिंग है। एक्वाल्स (string1.Substring (0, x), स्ट्रिंग 2) स्ट्रिंग 1 से बेहतर है। स्टार्ट्सविथ (स्ट्रिंग 2)?
MSDN निम्न स्ट्रिंग तुलना सलाह HERE देता है, लेकिन यह स्पष्ट नहीं है क्यों:
MSDN उदाहरण (आधे रास्ते के ऊपर पृष्ठ नीचे):
public static bool IsFileURI(string path)
{
path.StartsWith("FILE:", StringComparison.OrdinalIgnoreCase);
return true;
}
MSDN सलाह:
"हालांकि, पिछले उदाहरण समानता के परीक्षण के लिए स्ट्रिंग.StartsWith (स्ट्रिंग, स्ट्रिंग कॉम्परिसन) विधि का उपयोग करता है। क्योंकि तुलना का उद्देश्य आदेश के बजाए समानता के लिए परीक्षण करना है स्ट्रिंग्स में, एक बेहतर विकल्प बराबर विधि को कॉल करना है, जैसा कि निम्नलिखित उदाहरण में दिखाया गया है। "
public static bool IsFileURI(string path)
{
if (path.Length < 5) return false;
return String.Equals(path.Substring(0, 5), "FILE:",
StringComparison.OrdinalIgnoreCase);
}
प्रश्न: क्यों MSDN सुझाव है दूसरे उदाहरण बेहतर है?
चर्चा के बिंदु:
जाहिर है पहले उदाहरण में
return true;
एक बग है औरreturn path.StartsWith(...);
होना चाहिए। हम इसे एक बग के रूप में सुरक्षित रूप से अनदेखा कर सकते हैं क्योंकि वीबी कोड सही है।समानता की तुलना करने से पहले एक सबस्ट्रिंग का निर्माण केवल स्ट्रिंग.StartsWith() को कॉल करने की तुलना में एक और मेमोरी संसाधन का उपयोग करना प्रतीत होता है।
लंबाई < 5 परीक्षण एक अच्छा शॉर्ट सर्किट है, हालांकि इसका उपयोग पहले कोड के साथ ही किया जा सकता है।
दूसरा उदाहरण स्पष्ट कोड के रूप में समझा जा सकता है, लेकिन मैं प्रदर्शन से चिंतित हूं। सबस्ट्रिंग का निर्माण अनावश्यक लगता है।
तथ्य 'StartsWith' नमूना समारोह कोई मतलब नहीं है कि के आधार पर पारित करके सुरक्षा चिंताओं को दरकिनार कर सकता है, मैं विचार है कि के साथ जाने के लिए जा रहा हूँ नमूना मूल रूप से एक अलग फ़ंक्शन का उपयोग करता था (जैसे 'तुलनात्मक'), और किसी ने संदर्भ पर ध्यान दिए बिना नमूना को खतरनाक रूप से बदल दिया। – Gabe
मुझे लगता है कि 'स्टार्टविथ' आपके इरादे को व्यक्त करने में बहुत स्पष्ट है। – I82Much
@Gabe क्या आप सामान्य प्रश्न पर फिर से विचार कर सकते हैं? स्टार्ट्सविथ का उपयोग करना मेरे लिए बेहतर लगता है। तुलना के लिए एक सबस्ट्रिंग बनाना कम अच्छी तरह से प्रदर्शन करने की संभावना है। –