¿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?


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();

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(','));

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>();


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

0

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

existingList.AddRange(names.Split(','));

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 = ';' });
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.