Domanda

Ho uno System.Array che ho bisogno di convertire in string []. C'è un modo migliore per farlo che solo il ciclo attraverso l'array, chiamando ToString su ogni elemento, e il salvataggio in una stringa []? Il problema è che non necessariamente conosce il tipo di elementi fino a runtime.

È stato utile?

Soluzione

Come sull'utilizzo di LINQ?

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

Altri suggerimenti

E 'solo Array? O è (per esempio) object[]? Se è così:

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

Nota di qualsiasi 1-d matrice di riferimento tipi dovrebbe essere calcinabile per object[] (anche se in realtà è, per esempio, Foo[]), ma di valore tipi (ad esempio int[]) non può essere. Così si potrebbe provare:

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

Ma se si tratta di qualcosa di simile int[], dovrete ciclo manualmente.

È possibile utilizzare Array.ConvertAll, in questo modo:

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

approccio semplice e di base;

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);

O solo un altro approccio: è possibile utilizzare personNames.ToArray troppo:

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

Questo probabilmente può essere compresso, ma si aggira il limite di non essere in grado di utilizzare Fusioni <> o Linq Select su un tipo System.Array di oggetto.

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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top