string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Esto no funciona porque el método de división devuelve una cadena []
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
Esto no funciona porque el método de división devuelve una cadena []
Respuestas:
Aquí hay una forma de hacerlo:
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
?
ToList()
lugar; el resultado es esencialmente el mismo: List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
sin embargo, debe hacer uno u otro, porque el valor de retorno de Select()
es un IEnumerable<>
, pero no unList<>
Select
extensión en este caso regresa IEnumerable<Int32>
y no está en la lista. Sin embargo, la lista tiene un constructor que acepta otra colección como fuente.
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
Si desea incluir una validación simple y omitir valores no válidos (en lugar de lanzar una excepción), aquí hay algo que usa TryParse:
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
EDITAR: Aquí hay una consulta actualizada basada en los comentarios de Antoine. Llama a TryParse primero para filtrar los valores incorrectos y luego a Parse para realizar la conversión real.
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
Edición 2: una consulta actualizada para C # 7.0, gracias a los comentarios de Charles Burns. Tenga en cuenta que con este enfoque eliminamos la variable mos extra, por lo que es un poco más limpio.
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
int.TryParse(m, out int _)
Puede usar LINQ w / int.Parse()
para convertir string[]
a an IEnumerable<int>
y luego pasar ese resultado al List<T>
constructor:
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
Un poco de LINQ recorre un largo camino:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
Sin LINQ Query, puede elegir este método,
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
y luego puedes convertir esta lista en tipo entero ...
.ToList<string>()
todavía necesitausing System.Linq;
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
.Select(x => x.Trim()
, ya que Parse recorta automáticamente cualquier espacio para usted.
Si está usando C # 3.5, puede usar Linq para lograr esto
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList();
o el corto
string tags = "9,3,12,43,2";
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList();
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
Hice una modificación a la respuesta de khalid13. Si el usuario pone una cadena de "0", su respuesta eliminaría eso de la lista resultante. Hice algo similar pero usé un objeto anónimo.
var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
.Where(w => w.didConvert)
.Select(s => s.convertedValue)
.ToList();
TrimNullProtection es una función personalizada que hice que protege si la cadena es nula.
Lo que hace lo anterior es eliminar cualquier cadena que no se haya podido convertir sin error. Si necesita un error si hubo un problema con la conversión, entonces la respuesta aceptada debería ser suficiente.
Me topé con esto y solo quiero compartir mi propia solución sin linq. Este es un enfoque primitivo. Los valores no enteros tampoco se agregarán en la lista.
List<int> TagIds = new List<int>();
string[] split = tags.Split(',');
foreach (string item in split)
{
int val = 0;
if (int.TryParse(item, out val) == true)
{
TagIds.Add(val);
}
}
Espero que esto ayude.
Es sencillo. Primero divide la cuerda. Recorte el espacio en blanco presente después de la coma (,). Luego use el sistema definido ToList ()
string TradeTypeEnum = "Physical Deal, Physical Concentrate"
Para eliminar el espacio después de ',' y convertir este texto separado por comas a Lista
List<string> IDs = (TradeTypeEnum.Split(',')).Select(t => t.Trim()).ToList();