Frage

Ich habe ein System. Array, das ich in String [] konvertieren muss. Gibt es eine bessere Möglichkeit, dies zu tun, als nur durch das Array zu gehen, jedes Element zu tostring und in einer Zeichenfolge zu speichern []? Das Problem ist, dass ich die Art der Elemente bis zur Laufzeit nicht unbedingt kenne.

War es hilfreich?

Lösung

Wie wäre es mit LINQ?

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

Andere Tipps

Ist es gerecht? Array? Oder ist es (zum Beispiel) object[]? Wenn ja:

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

Beachten object[] (Auch wenn es zum Beispiel tatsächlich ist, Foo[]), aber Mehrwerttypen (wie z. int[]) kann nicht sein. Sie könnten also versuchen:

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

Aber wenn es so etwas ist wie int[], Sie müssen manuell schleifen.

Sie können verwenden Array.ConvertAll, so was:

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

Einfacher und grundlegender Ansatz;

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

Oder nur ein anderer Ansatz: Sie können verwenden personNames.ToArray zu:

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

Dies kann wahrscheinlich komprimiert werden, aber es geht um die Einschränkung, dass Sie nicht in der Lage sind, Guss <> oder linq Select in einem System zu verwenden. Array -Art des Objekts.

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));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top