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(newchar[]{','}).ToList();
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 mí .
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>:
string given="Welcome To Programming";List<string> listItem= given.Split(' ').ToList();//Split according to space in the string and added into the list
//Default delimiter is ,var split =newStringConverter().ConvertTo<List<string>>(names);//You can also have your custom delimiter for e.g. ;var split =newStringConverter().ConvertTo<List<string>>(names,newConverterOptions{Delimiter=';'});
for
bucle, que es más tedioso, propenso a errores y poco claro.Respuestas:
O incluso más limpio por sugerencia de Dan:
fuente
new char[] { }
parte completa . Es más legible de esa manera, al menos para mí .System.LINQ
espacio de nombres?El
List<T>
tiene un constructor que acepta unIEnumerable<T>
:fuente
Prefiero esto porque evita una lista de un solo elemento con un elemento vacío si su cadena de origen está vacía:
fuente
Divida una cadena delimitada por caracteres y devuelva todos los elementos no vacíos.
https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netframework-4.8
fuente
salida:
fuente
Si ya tiene una lista y desea agregar valores de una cadena delimitada, puede usar
AddRange
oInsertRange
. Por ejemplo:fuente
Utilice el paquete nuget Stringify.Library
fuente