.NET सब्सट्रिंग विधि जोखिम के साथ भरा है। मैंने विस्तार विधियाँ विकसित कीं जो विविध प्रकार के परिदृश्यों को संभालती हैं। अच्छी बात यह है कि यह मूल व्यवहार को संरक्षित करता है, लेकिन जब आप एक अतिरिक्त "सच" पैरामीटर जोड़ते हैं, तो यह अपवाद को संभालने के लिए विस्तार विधि का समर्थन करता है, और सूचकांक और लंबाई के आधार पर सबसे तार्किक मान देता है। उदाहरण के लिए, यदि लंबाई ऋणात्मक है, और पीछे की ओर गिना जाता है। आप परीक्षण के परिणामों को फिडल पर विभिन्न प्रकार के मूल्यों के साथ देख सकते हैं: https://dotnetfiddle.net/m1mSH9 । यह आपको इस बात पर स्पष्ट विचार देगा कि यह किस तरह से सबस्ट्रिंग को हल करता है।
मैं हमेशा अपनी सभी परियोजनाओं में इन तरीकों को जोड़ता हूं, और कोड ब्रेकिंग के बारे में कभी भी चिंता करने की ज़रूरत नहीं है, क्योंकि कुछ बदल गया है और सूचकांक अमान्य है। नीचे कोड है।
public static String Substring(this String val, int startIndex, bool handleIndexException)
{
if (!handleIndexException)
{ //handleIndexException is false so call the base method
return val.Substring(startIndex);
}
if (string.IsNullOrEmpty(val))
{
return val;
}
return val.Substring(startIndex < 0 ? 0 : startIndex > (val.Length - 1) ? val.Length : startIndex);
}
public static String Substring(this String val, int startIndex, int length, bool handleIndexException)
{
if (!handleIndexException)
{ //handleIndexException is false so call the base method
return val.Substring(startIndex, length);
}
if (string.IsNullOrEmpty(val))
{
return val;
}
int newfrom, newlth, instrlength = val.Length;
if (length < 0) //length is negative
{
newfrom = startIndex + length;
newlth = -1 * length;
}
else //length is positive
{
newfrom = startIndex;
newlth = length;
}
if (newfrom + newlth < 0 || newfrom > instrlength - 1)
{
return string.Empty;
}
if (newfrom < 0)
{
newlth = newfrom + newlth;
newfrom = 0;
}
return val.Substring(newfrom, Math.Min(newlth, instrlength - newfrom));
}
मैंने मई 2010 में इस बारे में वापस ब्लॉग किया: http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html