.NET 하위 문자열 방법은 위험에 처해 있습니다. 다양한 시나리오를 처리하는 확장 방법을 개발했습니다. 좋은 점은 원래 동작을 유지하지만 추가 "true"매개 변수를 추가하면 확장 메서드를 사용하여 예외를 처리 한 다음 인덱스와 길이를 기준으로 가장 논리적 인 값을 반환합니다. 예를 들어 길이가 음수이면 뒤로 계산됩니다. 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 년 5 월에 http://jagdale.blogspot.com/2010/05/substring-extension-method-that-does.html 에서이 문제에 대해 블로그를 작성했습니다.