วิธีการ. NET Substring เต็มไปด้วยอันตราย ฉันพัฒนาวิธีการขยายที่จัดการสถานการณ์ที่หลากหลาย สิ่งที่ดีคือมันรักษาพฤติกรรมดั้งเดิมไว้ แต่เมื่อคุณเพิ่มพารามิเตอร์ "จริง" เพิ่มเติมมันจะเปลี่ยนวิธีการส่วนขยายเพื่อจัดการกับข้อยกเว้นและส่งกลับค่าตรรกะมากที่สุดโดยอิงตามดัชนีและความยาว ตัวอย่างเช่นถ้าความยาวเป็นลบและนับถอยหลัง คุณสามารถดูผลการทดสอบที่มีความหลากหลายของค่าไวโอลินที่: 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));
}
ฉัน blogged เกี่ยวกับเรื่องนี้กลับในเดือนพฤษภาคม 2010 เวลา: http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html