J'ai un System.Array que je dois convertir en chaîne []. Existe-t-il une meilleure façon 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.
Réponses
Trop de publicités? Est-ce seulement 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 tout tableau 1-d de types de référence doit être convertible en object[]
(même s'il s'agit en fait, par exemple, Foo[]
), mais les types de valeur (tels que int[]
) ne peut pas l'être. Vous pouvez donc 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 boucler manuellement.
Cela peut probablement être compressé, mais il contourne la limitation de ne pas pouvoir 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));