.NET Substringメソッドには危険が伴います。さまざまなシナリオを処理する拡張メソッドを開発しました。元の動作は維持されますが、「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