Je récupère beaucoup d'informations dans une liste, liée à une base de données et je veux créer une chaîne de groupes, pour quelqu'un qui est connecté au site Web.
Je l'utilise pour tester mais ce n'est pas dynamique, donc c'est vraiment mauvais:
string strgroupids = "6";
Je veux l'utiliser maintenant. Mais la chaîne retournée est quelque chose comme1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Je veux supprimer l' ,
after, 5
mais ça ne marche définitivement pas.
strgroupids = strgroupids.TrimEnd(new char[] { ',' });
mais il y a de meilleures idées ci-dessous.Réponses:
MSDN:
la source
Qu'en est-il de cette façon
Un beaucoup plus propre.
Il ajoutera tous les éléments à l'intérieur
groupIds
avec un','
entre chacun, mais il ne mettra pas un','
à la fin.la source
Les chaînes en c # sont immuables. Dans votre code, vous le faites
strgroupids.TrimEnd(',');
oustrgroupids.TrimEnd(new char[] { ',' });
lastrgroupids
chaîne n'est pas modifiée .Vous devez faire quelque chose comme à la
strgroupids = strgroupids.TrimEnd(',');
place.Pour citer d' ici :
la source
Ajoutez une méthode d'extension.
puis utilisez:
la source
int n
le nombre de caractères à supprimer à la fin. Deuxièmement, vous testez la longueur zéro, mais cela n'élimine pas toutes les exceptions possibles. Ce serait mieux de le faireint index = ..LastIndexOf..
, alorsif (index >= 0)
.string character
est mal nommé. Quatrièmement, il n'est pas immédiatement évident pour les futurs programmeurs que cela supprime les caractères à la fin de la chaîne. Oh, attendez, ce n'est pas nécessairement le cas. Il recherche la chaîne. Il pourrait être retiré de quelque part au milieu. Le programmeur de maintenance doit maintenant examiner toutes les utilisations de la méthode, pour voir ce qui essayait d'être accompli. Pas une bonne méthode à appeler, pour ce simple besoin de supprimer de la fin d'une chaîne. Désolé pour toutes les critiques; Je le fais pour tous ceux qui adoptent cette méthode, afin qu'ils comprennent.String.TrimEnd
serait plus approprié de l'utiliser. Mais attendez, cela existe déjà - et a été mentionné dans la question d'origine et plusieurs autres réponses il y a 3 ans - pas besoin d'inventer une nouvelle méthode! Quel est l'avantage de votre approche?Supprime toutes les virgules de fin:
C'est à l'envers cependant, vous avez écrit le code qui ajoute la virgule en premier lieu. Vous devez utiliser à la
string.Join(",",g)
place, en supposant queg
est unstring[]
. Donnez-lui un meilleur nom queg
trop!la source
Au lieu d'ajouter une virgule pour chaque élément, vous pouvez simplement utiliser String.
Cela ajoutera le séparateur ("," dans ce cas) entre chaque élément du tableau.
la source
Notez que l'utilisation d'
ForEach
ici est normalement considérée comme "incorrecte" (lire par exemple http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx )Utilisation de LINQ:
Sans sous-chaîne d'extrémité:
la source
string.Join
est parfait SI vous avez un tableau de chaînes comme source OU vous avez C # 4.0En plus de la solution de sll: il est préférable de couper la chaîne au cas où il y aurait des blancs à la fin.
la source
string.Join
c'est mieux, mais si vous voulez vraiment un LINQForEach
:Quelques notes:
string.Join
etforeach
sont à la fois mieux que cela, approche beaucoup plus lente,
car il n'est jamais ajouté+=
) est pratique pour l'ajout aux chaînes.ToString()
est inutile car il est appelé automatiquement lors de la concaténation de non-chaînesStringBuilder
doit être pris en compte au lieu de concaténer des chaînesla source
if(strgroupids != string.Empty){
ForEach
;foreach (var g in groupIds) {
fonctionne aussi bien :)