Convertir System.Array à string []
-
21-09-2019 - |
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.
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));