web-dev-qa-db-fra.com

Convertir System.Array en chaîne []

J'ai un System.Array que j'ai besoin de convertir en chaîne []. Y a-t-il un meilleur moyen de le faire que de simplement parcourir le tableau, appeler ToString sur chaque élément et enregistrer dans une chaîne []? Le problème est que je ne connais pas nécessairement le type des éléments jusqu'à l'exécution.

39
KrisTrip

Que diriez-vous d'utiliser LINQ?

string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
63
Craig Stuntz

Est-ce juste Array? Ou est-ce (par exemple) object[]? Si c'est le cas:

object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);

Notez que n'importe quel tableau 1-d de types de référence doit pouvoir être converti en object[] (même s'il en est, par exemple, Foo[]), mais les types de valeur (tels que int[]) ne peuvent pas l'être. Pour que vous puissiez essayer:

Array a = ...
object[] arr = (object[]) a;
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);

Mais si c'est quelque chose comme int[], vous devrez faire une boucle manuellement.

13
Marc Gravell

Vous pouvez utiliser Array.ConvertAll, comme ceci:

string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
4
Amit Degadwala

Approche simple et basique;

Array personNames = Array.CreateInstance(typeof (string), 3);
// or Array personNames = new string[3];
personNames.SetValue("Ally", 0);
personNames.SetValue("Eloise", 1);
personNames.SetValue("John", 2);

string[] names = (string[]) personNames; 
// or string[] names = personNames as string[]

foreach (string name in names)
    Console.WriteLine(name);

Ou juste une autre approche: Vous pouvez aussi utiliser personNames.ToArray:

string[] names = (string[]) personNames.ToArray(typeof (string));
0
Umut D.

Cela peut probablement être compressé, mais cela élimine la limitation de l'impossibilité d'utiliser Cast <> ou Linq Select sur un type d'objet System.Array.

Type myType = MethodToGetMyEnumType();
Array enumValuesArray = Enum.GetValues(myType);
object[] objectValues new object[enumValuesArray.Length];
Array.Copy(enumValuesArray, objectValues, enumValuesArray.Length);

var correctTypeIEnumerable = objectValues.Select(x => Convert.ChangeType(x, t));
0
bougiefever