Je voudrais tronquer une chaîne de caractères de sorte que sa longueur ne dépasse pas une valeur donnée. J'écris dans une table de base de données et je veux m'assurer que les valeurs que j'écris respectent la contrainte du type de données de la colonne.
Par exemple, ce serait bien si je pouvais écrire ce qui suit :
string NormalizeLength(string value, int maxLength)
{
return value.Substring(0, maxLength);
}
Malheureusement, cela soulève une exception car maxLength
dépasse généralement les limites de la chaîne value
. Bien sûr, je pourrais écrire une fonction comme la suivante, mais j'espérais que quelque chose de ce genre existe déjà.
string NormalizeLength(string value, int maxLength)
{
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
Où se trouve l'insaisissable API qui effectue cette tâche ? Y en a-t-il une ?
29 votes
Pour mémoire, les chaînes de caractères sont immuables ; vous ne pouvez pas les tronquer ; vous pouvez seulement en renvoyer une copie tronquée. C'est un peu délicat, je sais.
3 votes
@John Weldon : C'est probablement la raison pour laquelle la fonction membre n'existe pas -- elle ne suit pas la sémantique du type de données. A propos,
StringBuilder
vous permet de tronquer en raccourcissant la longueur, mais vous devez toujours effectuer la vérification de la longueur pour éviter d'élargir la chaîne.1 votes
Quelle que soit la solution retenue, veillez à ajouter une vérification de l'absence de chaîne nulle avant d'appeler Substring ou d'accéder à la propriété Length.
3 votes
@SteveGuidi - Si c'était le cas, il n'y aurait pas de fonctions comme Trim ou Replace, qui sont confrontées à des problèmes sémantiques similaires.
3 votes
@JohnWeldon Plus pointilleux que Microsoft ne l'est constamment, il se trouve qu'ils sont heureux de se documenter, par exemple,
.Trim()
d'une manière qui donne l'impression trompeuse de muter la chaîne : "Supprime tous les caractères d'espacement en tête et en queue de l'objet String actuel."0 votes
Pourquoi ne pas simplement utiliser Truncate de Microsoft.Toolkit.Extensions ? Ou peut-être n'existait-il pas à l'époque.