J'ai un System.Array que j'ai besoin de convertir en chaîne []. Existe-t-il une meilleure façon de faire cela que simplement boucler dans le tableau, en appelant ToString sur chaque élément, et en enregistrant dans une chaîne []? Le problème est que je ne connais pas nécessairement le type des éléments avant l'exécution.Convertir System.Array en string []
Répondre
Comment utiliser LINQ?
string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
Est-ce juste Array
? Ou est-ce (par exemple) object[]
? Si oui:
object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
Remarque que tout tableau 1-d de types de référence devraient être castées object[]
(même si elle est en fait, par exemple, Foo[]
), mais des types de valeur (tels que int[]
) peut » t ê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.
Il s'agit juste d'un tableau et il pourrait contenir des types de valeurs (probablement). – KrisTrip
@KrisTrip - la variable * peut être "juste Array", mais l'objet ne sera pas; il a un type de tableau défini. Il y a aussi une différence de ** gros ** entre "contain value types" (que object [] 'peut faire), et" est un tableau de type valeur "(comme' int [] ').Cette différence compte dans ce cas. Pouvez-vous clarifier ce que ** exactement ** l'instance de 'Array' est? –
Je reçois le tableau en utilisant une méthode ToArray. Je ne sais pas jusqu'à l'exécution, mais il peut s'agir d'un int [], double [], float [], chaîne [] ou Complex [] (objet défini par l'utilisateur) – KrisTrip
Vous pouvez utiliser Array.ConvertAll
, comme ceci:
string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
Cela peut probablement être compressé, mais il contourne la limitation de ne pas être en mesure d'utiliser Cast <> ou Linq Sélectionnez un type de System.Array 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));
Encore un tableau d'objets génériques. –
Approche simple et simple;
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));
Sans connaître les types jusqu'à ce que l'exécution, vous devez essentiellement itérer sur le tableau (que ce soit avec LINQ ou toute autre méthode). – GrayWizardx
(a répondu au commentaire) –