Metode .NET Substring penuh dengan bahaya. Saya mengembangkan metode ekstensi yang menangani berbagai skenario. Yang menyenangkan adalah ia mempertahankan perilaku asli, tetapi ketika Anda menambahkan parameter "true" tambahan, ia kemudian beralih ke metode ekstensi untuk menangani pengecualian, dan mengembalikan nilai yang paling logis, berdasarkan indeks dan panjangnya. Misalnya, jika panjangnya negatif, dan dihitung mundur. Anda dapat melihat hasil tes dengan berbagai nilai pada biola di: https://dotnetfiddle.net/m1mSH9 . Ini akan memberi Anda gagasan yang jelas tentang cara menyelesaikan substring.
Saya selalu menambahkan metode ini ke semua proyek saya, dan tidak perlu khawatir tentang pemecahan kode, karena sesuatu berubah dan indeks tidak valid. Di bawah ini adalah kode.
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));
}
Saya membuat blog tentang ini kembali pada Mei 2010 di: http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html