Estou recuperando muitas informações de uma lista, vinculadas a um banco de dados e desejo criar uma sequência de grupos, para alguém conectado ao site.
Eu uso isso para testar, mas isso não é dinâmico, por isso é muito ruim:
string strgroupids = "6";
Eu quero usar isso agora. Mas a string retornada é algo como1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Eu quero excluir o ,
após o, 5
mas definitivamente não está funcionando.
strgroupids = strgroupids.TrimEnd(new char[] { ',' });
que existem idéias melhores abaixo.Respostas:
MSDN:
fonte
Que tal fazer dessa maneira
Um muito mais limpo.
Anexará todos os elementos internos
groupIds
com um','
entre cada, mas não colocará um','
no final.fonte
Strings em c # são imutáveis. Quando você faz o seu código
strgroupids.TrimEnd(',');
oustrgroupids.TrimEnd(new char[] { ',' });
astrgroupids
string não é modificada .Você precisa fazer algo parecido
strgroupids = strgroupids.TrimEnd(',');
.Para citar aqui :
fonte
Adicione um método de extensão.
então use:
fonte
int n
o número de caracteres a serem removidos no final. Segundo, você testa o comprimento zero, mas isso não elimina todas as exceções possíveis. Seria melhor fazerint index = ..LastIndexOf..
, entãoif (index >= 0)
.string character
tem nome. Quarto, não é imediatamente óbvio para futuros programadores que isso está removendo caracteres no final da string. Oh espere, não é necessariamente fazê-lo. Está pesquisando a string. Poderia estar removendo de algum lugar no meio. Agora, o programador de manutenção precisa examinar todos os usos do método, para ver o que estava tentando ser realizado. Não é um bom método para chamar, por essa simples necessidade de remover do final de uma string. Desculpe por todas as críticas; Faço isso para quem adota esse método, para que eles entendam.String.TrimEnd
seria mais apropriado usar. Mas espere, isso já existe - e foi mencionado na pergunta original e em várias outras respostas há 3 anos - não há necessidade de inventar um novo método! Qual é o benefício da sua abordagem?Remove as vírgulas finais:
Isso é inverso, você escreveu o código que adiciona a vírgula em primeiro lugar. Você deve usar
string.Join(",",g)
, assumindo queg
é astring[]
. Dê um nome melhor do queg
também!fonte
Como alternativa à adição de vírgula para cada item, você pode apenas usar String.
Isso adicionará o separador ("," nesta instância) entre cada elemento na matriz.
fonte
Observe que o uso
ForEach
aqui é normalmente considerado "errado" (leia, por exemplo, http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx )Usando alguns LINQ:
Sem substring final:
fonte
string.Join
é perfeito se você tem uma matriz de strings como fonte ou você tem C # 4.0Adicional à solução da sll: É melhor aparar a corda caso haja alguns espaços em branco no final.
fonte
string.Join
é melhor, mas se você realmente quer um LINQForEach
:Algumas notas:
string.Join
eforeach
são melhores do que essa abordagem, muito mais lenta,
pois ele nunca é anexado+=
) é útil para anexar a strings.ToString()
é desnecessário, pois é chamado automaticamente ao concatenar não-stringsStringBuilder
deve ser considerado em vez de concatenar as cordasfonte
if(strgroupids != string.Empty){
ForEach
;foreach (var g in groupIds) {
funciona tão bem :)