Como converter uma lista em uma seqüência de caracteres em c #?
Quando executo toString
um objeto List, recebo:
System.Collections.Generic.List`1 [System.String]
Como converter uma lista em uma seqüência de caracteres em c #?
Quando executo toString
um objeto List, recebo:
System.Collections.Generic.List`1 [System.String]
Respostas:
Talvez você esteja tentando fazer
string combindedString = string.Join( ",", myList.ToArray() );
Você pode substituir "," pelo que deseja dividir os elementos da lista.
Edit : Como mencionado nos comentários, você também pode fazer
string combindedString = string.Join( ",", myList);
Referência:
Join<T>(String, IEnumerable<T>)
Concatenates the members of a collection, using the specified separator between each member.
Vou seguir meu pressentimento e supor que você deseja concatenar o resultado de chamar ToString
cada elemento da lista.
var result = string.Join(",", list.ToArray());
Você poderia usar string.Join
:
List<string> list = new List<string>()
{
"Red",
"Blue",
"Green"
};
string output = string.Join(Environment.NewLine, list.ToArray());
Console.Write(output);
O resultado seria:
Red
Blue
Green
Como alternativa Environment.NewLine
, você pode substituí-lo por um separador de linhas baseado em string de sua escolha.
Se você quiser algo um pouco mais complexo que uma simples junção, use o LINQ, por exemplo
var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");
Vai pegar ["A", "B", "C"] e produzir "(a) (b) (c)"
String.Join(" ", myList)
ou String.Join(" ", myList.ToArray())
. O primeiro argumento é o separador entre as substrings.
var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"
Dependendo da sua versão do .NET, talvez seja necessário usar o ToArray () na lista primeiro.
Você tem um List<string>
- então, se você deseja que eles sejam concatenados, algo como
string s = string.Join("", list);
funcionaria (pelo menos no .NET 4.0). O primeiro parâmetro é o delimitador. Então você também pode delimitar vírgulas etc.
Você também pode querer usar o StringBuilder para executar concatenações, em vez de formar uma lista.
O .ToString()
método para tipos de referência geralmente volta paraSystem.Object.ToString()
, menos que você o substitua em um tipo derivado (possivelmente usando métodos de extensão para os tipos internos). O comportamento padrão desse método é gerar o nome do tipo em que é chamado. Então, o que você está vendo é o comportamento esperado.
Você pode tentar algo parecido string.Join(", ", myList.ToArray());
para conseguir isso. É uma etapa extra, mas pode ser aplicada em um método de extensão System.Collections.Generic.List<T>
para facilitar um pouco. Algo assim:
public static class GenericListExtensions
{
public static string ToString<T>(this IList<T> list)
{
return string.Join(", ", list);
}
}
(Observe que este é um código à mão livre e não testado. Eu não tenho um compilador à mão no momento. Portanto, convém experimentar um pouco.)
É difícil dizer, mas talvez você esteja procurando algo como:
var myString = String.Join(String.Empty, myList.ToArray());
Isso implicitamente chamará o método ToString () em cada um dos itens da lista e os concatenará.
String.Concat()
vai conseguir a mesma coisa melhor.
Se você está olhando para transformar os itens em uma lista em uma grande cadeia longa, faça o seguinte: String.Join("", myList)
. Algumas versões mais antigas da estrutura não permitem que você passe um IEnumerable como o segundo parâmetro, portanto, pode ser necessário converter sua lista em uma matriz chamando .ToArray ().
A resposta direta à sua pergunta é String.Join
como outros já mencionaram.
No entanto, se você precisar de algumas manipulações, poderá usar Aggregate
:
List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");
string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();
Esse método me ajudou ao tentar recuperar dados do arquivo de texto e armazená-lo na matriz e, em seguida, atribuí-lo a uma string disponível.
string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");
string marRes = string.Join(Environment.NewLine, lines.ToArray());
Espero que possa ajudar alguém !!!!
todas as respostas acima NÃO funcionam para listas aninhadas.