2012-04-21 10 views
6

tengo este pedazo de código:secuencia de enteros a la lista de enteros con un TryParse

TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries  
List<int> TheListOfIDs = new List<int>(); 
TheListOfLeadIDs = from string s in TheString.Split(',') 
        select Convert.ToInt32(s)).ToList<int>(); 

Sé que puedo utilizar un intento de captura para asegurarse de que la conversión no lanza un error pero me preguntaba cómo podría hacer que esto funcione con un TryParse en la sentencia linq.

Gracias.

+2

¿Qué espera que suceda cuando se encontró un valor que no es int, reemplázalo con 0, ignóralo, ¿arrojas un error? – ilivewithian

Respuesta

7
TheListOfLeadIDs = (from string s in TheString.Split(',') 
        let value = 0 
        where int.TryParse(s, out value) 
        select value).ToList<int>(); 
+0

Aparece el error: 'la variable de rango de solo lectura no se puede usar como un objetivo de asignación' – Myster

+0

Esto no funciona. 'No se puede pasar la variable de rango como un parámetro de salida o ref' – Phil

+0

No voy a rechazar, ya que podría estar perdiendo algo. Sin embargo: esto NO funciona. –

6
TheListOfIDs = TheString.Split(',') 
         .Select(s => 
         { 
          int i; 
          return Int32.TryParse(s, out i) ? i : -1; 
         }).ToList(); 

Esto devolverá un -1 para cualquier Error de conversión.

0

Advertencia: no lo intenté.

string[] myString = TheString.Split(','); 

int leadId; 
var theListOfLeadIds = (from myString in myString where int.TryParse(myString, out leadId) select int.Parse(myString)).ToList<int>(); 

Lo que significa que sólo obtendrá el valor analizado correctamente ...

2

que podría hacerlo de esta manera:

string TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries 
int temp=0; 
var TheListOfIDs= TheString 
        .Split(',') 
        .Where (ts =>int.TryParse(ts,out temp)) 
        .Select (ts =>temp) 
        .ToList(); 
Cuestiones relacionadas