我現在考慮字符串的部分是這樣的:簡單的方法來避免超過字符串邊界的子字符串?
something.Substring(0, something.Length >= 8 ? 8 : something.Length)
的額外混亂的唯一原因是因爲有時長度比我放在方法參數小,這會導致錯誤。
是否有更簡單的方法來安全地剪裁文本?
我現在考慮字符串的部分是這樣的:簡單的方法來避免超過字符串邊界的子字符串?
something.Substring(0, something.Length >= 8 ? 8 : something.Length)
的額外混亂的唯一原因是因爲有時長度比我放在方法參數小,這會導致錯誤。
是否有更簡單的方法來安全地剪裁文本?
在string
上寫一個擴展方法,將「混亂」隱藏起來。
public static string SafeSubstring(this string orig, int length)
{
return orig.Substring(0, orig.Length >= length ? length : orig.Length);
}
something.SafeSubstring(8);
Visual Basic實現了Right()和Left()字符串函數。還不如偷他們,他們已經得到了很好的測試:
public static class Extensions {
public static string Right(this string str, int Length) {
if (Length < 0) throw new ArgumentOutOfRangeException("Length");
if (Length == 0 || str == null) return string.Empty;
int len = str.Length;
if (Length >= len) return str;
else return str.Substring(len - Length, Length);
}
public static string Left(this string str, int Length)
{
if (Length < 0) throw new ArgumentOutOfRangeException("Length");
if (Length == 0 || str == null) return string.Empty;
int len = str.Length;
if (Length >= len) return str;
else return str.Substring(0, Length);
}
}
OP的問題似乎需要相當於Left(),而不是Right()。編輯這個答案來包含Left() –
這不是做到這一點的最有效的方式,我將與俄德的解決方案去,但是這也是一個方式來實現你」尋找:
new string(something.Take(8).ToArray());
這裏真的不需要醜陋的三元表達。
return something.Substring(0, Math.Min(length, something.Length));
受Hans Passant's answer的啓發,這裏有一個更直接的方式來「竊取」Visual Basic實現。 (這種方法需要添加到Microsoft.VisualBasic.dll中的引用)
public static class Extensions
{
public static string Right(this string str, int Length) =>
Microsoft.VisualBasic.Strings.Right(str, Length);
public static string Left(this string str, int Length) =>
Microsoft.VisualBasic.Strings.Left(str, Length);
}
AFAIK不是在框架,但它應該是微不足道自己寫出這樣的方法。 – svick