Question

J'ai System.Array que je dois convertir en string []. Y at-il une meilleure façon de le faire que juste en boucle à travers le réseau, en appelant ToString sur chaque élément, et l'enregistrement d'une chaîne []? Le problème est que je ne sais pas nécessairement le type des éléments jusqu'à l'exécution.

Était-ce utile?

La solution

Qu'en est-il LINQ?

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

Autres conseils

Est-il juste Array? Ou est-ce (par exemple) object[]? Si oui:

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

Notez que tout tableau 1-d de référence types devrait être castées object[] (même si elle est en fait, par exemple, Foo[]), mais des types de valeur (tels que int[]) ne peut pas être. Donc, vous pouvez essayer:

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

Mais si elle est quelque chose comme int[], vous devrez boucle manuellement.

Vous pouvez utiliser Array.ConvertAll, comme ceci:

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

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 utiliser personNames.ToArray aussi:

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

Cela peut probablement être compressé, mais il contourne la limitation de ne pas pouvoir utiliser Cast <> ou Linq Sélectionnez un type System.Array d'objet.

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));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top