¿Convertir cadena a List <string> en una línea?

101

Tengo una cuerda:

var names = "Brian,Joe,Chris";

¿Hay alguna forma de convertir esto en un List<string>delimitado por ,en una línea?

Brian David Berman
fuente
15
No entiendo el requisito "en una línea". Intente escribir código que sea claro y comprensible, no formas de encajar una operación en un espacio tan pequeño como sea posible.
Ed S.
6
Con el advenimiento de LINQ, "one liners" que son legibles y limpios se han vuelto mucho más comunes en C # IMO.
Matt Greer
5
@Ed S. - Si bien estoy de acuerdo en que "en una línea" puede no ser la mejor manera de decirlo, las declaraciones de una sola línea como la que ofrece Matt Greer tienden a ser muy claras y comprensibles. Supongo que solo quiere evitar el uso de un forbucle, que es más tedioso, propenso a errores y poco claro.
StriplingWarrior
4
No quiero decir que las frases ingeniosas sean intrínsecamente más difíciles de entender, solo digo que nunca debería ser un requisito. Hágalo de la mejor manera disponible. Si eso está en una línea, genial, pero no es algo que deba dar forma a la forma en que escribe su código.
Ed S.

Respuestas:

197
List<string> result = names.Split(new char[] { ',' }).ToList();

O incluso más limpio por sugerencia de Dan:

List<string> result = names.Split(',').ToList();
Matt Greer
fuente
11
Puede que lo hayas puesto allí a propósito, pero yo siempre omito la new char[] { }parte completa . Es más legible de esa manera, al menos para .
Dan Tao
4
@Dan: Estoy de acuerdo, y generalmente uso la sobrecarga de parámetros. Pero para una respuesta a una pregunta, a veces siento que la verbosidad es mejor. Realmente es solo una cuestión de opinión.
Matt Greer
2
¿ToList () ya no parece estar disponible?
Gina Marano
10
¿Trajiste el System.LINQespacio de nombres?
Matt Greer
42

El List<T>tiene un constructor que acepta un IEnumerable<T>:

List<string> listOfNames = new List<string>(names.Split(','));
Nathan Anderson
fuente
Excelente - no es necesario importar System.Linq
VictorySaber
3

Prefiero esto porque evita una lista de un solo elemento con un elemento vacío si su cadena de origen está vacía:

  IEnumerable<string> namesList = 
      !string.isNullOrEmpty(names) ? names.Split(',') : Enumerable.Empty<string>();
KingOfHypocrites
fuente
1
string given="Welcome To Programming";
List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list

salida:

Welcome

To 

Programming
Maghalakshmi Saravana
fuente
0

Si ya tiene una lista y desea agregar valores de una cadena delimitada, puede usar AddRangeo InsertRange. Por ejemplo:

existingList.AddRange(names.Split(','));
c32hedge
fuente
0

Utilice el paquete nuget Stringify.Library

//Default delimiter is ,
var split = new StringConverter().ConvertTo<List<string>>(names);

//You can also have your custom delimiter for e.g. ;
var split = new StringConverter().ConvertTo<List<string>>(names, new ConverterOptions { Delimiter = ';' });
Mithun Basak
fuente