文字列の長さが指定された値を超えないように文字列を切り捨てたいと思います。データベース テーブルに書き込んでおり、書き込む値が列のデータ型の制約を満たしていることを確認したいです。
たとえば、次のように書けたらいいでしょう。
string NormalizeLength(string value, int maxLength)
{
return value.Substring(0, maxLength);
}
maxLength
残念ながら、これは一般に文字列の境界を超えるため、例外を発生させますvalue
。もちろん、次のような関数を書くこともできますが、このようなものがすでに存在していることを期待していました。
string NormalizeLength(string value, int maxLength)
{
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
このタスクを実行するわかりにくい API はどこにありますか? ありますか?
ベストアンサー1
Truncate()
残念ながら、文字列にはメソッドがありません。この種のロジックは自分で記述する必要があります。ただし、これを拡張メソッドでラップして、どこでも重複しないようにすることはできます。
public static class StringExt
{
public static string Truncate(this string value, int maxLength)
{
if (string.IsNullOrEmpty(value)) return value;
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
}
次のように記述できます。
var someString = "...";
someString = someString.Truncate(2);
2021-09-17 サフィックスと c#8 null 許容参照型を使用した代替。
public static class StringExt
{
public static string? Truncate(this string? value, int maxLength, string truncationSuffix = "…")
{
return value?.Length > maxLength
? value.Substring(0, maxLength) + truncationSuffix
: value;
}
}
書き方:
"abc".Truncate(2); // "ab…"
"abc".Truncate(3); // "abc"
((string)null).Truncate(3); // null