2010-12-08 29 views
20

J'ai:Comment convertir un String [] en int [] en C# et .NET 2.0?

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

Et je veux quelque chose comme ça

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

Je travaille int C# .net v2.0, je ne veux pas écrire beaucoup de code.

Comment puis-je faire cela?

Merci.

+0

.Net 3.0+ version pour les gens de google: 'int [] intArr = strArr.Select (int.Parse) .ToArray() ' –

+0

(commentaire embarrassant enlevé) – Will

+0

@Voici trop tard, je l'ai vu; p –

Répondre

37

Vous pouvez utiliser la méthode Array.ConvertAll à cette fin, qui "convertit un tableau d'un type en tableau d'un autre type".

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

(EDIT:. Type d'inférence fonctionne très bien avec cette technique Sinon, vous pouvez également utiliser une conversion méthode groupe implicite dans la réponse de Marc Gravell, mais vous devez spécifier les génériques arguments de type explicitement.)

en utilisant une boucle for:

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

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

pour être complet, la façon de le faire idiomatiques en C# 4.0 serait quelque chose comme:

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

ou:

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

Merci juste ce que je veux –

2
using System.Collections.Generic; 

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

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

ou

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

Lorsque vous êtes sûr, tous les articles sont certainement analysable, cela fera l'affaire:

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

Quelque chose comme ça, mais vous voulez garder un peu de la vérification d'erreur (mon si est vraiment boiteux, juste par exemple):

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; 
} 

Et l'utiliser comme ceci:

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

Int32.Parse ne peut pas retourner null - il renvoie un int. –

+0

'Int32.Parse()' renvoie 'Int32' qui est struct (type de valeur), donc'! = Null' passe toujours. Cette ligne de code génère un avertissement concernant ce dont je parle. – abatishchev

+0

Merci pour les heads up, je vais corriger le code ci-dessus. – SimoneF

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

ou en C# 2.0 (où l'inférence de type générique est plus faible):

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