2010-12-08 17 views
20

Tengo:Cómo convertir una cadena [] a int [] en C# y .NET 2.0?

string[] strArray = new string[3] { "1", "2", "12" }; 

Y quiero algo como esto

int[] intArray = Convert.toIntArray(strArray); 

trabajo int C# .NET v2.0, no quiero escribir mucho código.

¿Cómo puedo hacer eso?

Gracias.

+0

.Net 3.0 o superior para la gente de Google: 'int [] = intArr strArr.Select (int.Parse) .ToArray() ' –

+0

(comentario embarazoso eliminado) – Will

+0

@Will demasiado tarde, lo vi; p –

Respuesta

37

Usted puede utilizar el método Array.ConvertAll para este propósito, que "convierte una matriz de un tipo a una matriz de otro tipo."

int[] intArray = Array.ConvertAll(strArray, 
            delegate(string s) { return int.Parse(s); }); 

(EDIT:. Tipo de inferencia trabaja muy bien con esta técnica alternativa, también se puede utilizar un método de conversión de grupos implícita como en la respuesta de Marc Gravell, pero usted tiene que especificar el tipo genérico de argumentos de forma explícita.)

el uso de un bucle for:

int[] intArray = new int[strArray.Length]; 

for (int i = 0; i < strArray.Length; i++) 
    intArray[i] = int.Parse(strArray[i]); 

para completar, la forma idiomática de hacer esto en C# 4.0 sería algo así como:

var intArray = strArray.Select(int.Parse).ToArray(); 

o:

//EDIT: Probably faster since a fixed-size buffer is used 
var intArray = Array.ConvertAll(strArray, int.Parse); 
+0

Gracias, lo que quiero –

2
using System.Collections.Generic; 

int Convert(string s) 
{ 
    return Int32.Parse(s); 
} 

int[] result = Array.ConvertAll(input, new Converter<string, int>(Convert)); 

o

int[] result = Array.ConvertAll(input, delegate(string s) { return Int32.Parse(s); }) 
1

Cuando esté seguro, todos los artículos son definitivamente apta para su procesamiento, esto va a hacer el truco:

string[] strArray = new string[3] { "1", "2", "12" }; 
int[] intArray = new int[strArray.Length]; 
for (int i = 0; i < strArray.Length; i++) 
{ 
    intArray[i] = int.Parse(strArray[i]); 
} 
0

Algo como esto, pero que desea mantener un poco de comprobación de errores (mi si es realmente cojo, solo como ejemplo):

static private int[] toIntArray(string[] strArray) 
{ 
    int[] intArray = new int[strArray.Length]; 
    for (int index = 0; index < strArray.Length; index++) 
    { 
      intArray[index] = Int32.Parse(strArray[index]); 
    } 
    return intArray; 
} 

Y utilizar de esta manera:

string[] strArray = new string[3] { "1", "2", "12" }; 
int[] interi = toIntArray(strArray); 
+3

Int32.Parse no puede devolver nulo - devuelve un int. –

+0

'Int32.Parse()' devuelve 'Int32' que es struct (tipo de valor), por lo tanto'! = Null' siempre pasa. Esta línea de código genera una advertencia sobre de qué estoy hablando. – abatishchev

+0

Gracias por el aviso, corregiré el código anterior. – SimoneF

16
int[] intArray = Array.ConvertAll(strArray, int.Parse); 

o en C# 2.0 (donde el tipo genérico inferencia es más débil):

versión
int[] intArray = Array.ConvertAll<string,int>(strArray, int.Parse);