Pergunta

Eu tenho um sistema. Existe uma maneira melhor de fazer isso do que apenas percorrer a matriz, chamando a tostragem em cada elemento e salvando para uma string []? O problema é que eu não sei necessariamente o tipo de elementos até o tempo de execução.

Foi útil?

Solução

Que tal usar o LINQ?

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

Outras dicas

É apenas Array? Ou é (por exemplo) object[]? Se for assim:

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

Nota do que qualquer matriz 1-D de tipos de referência deve ser fundível para object[] (mesmo que seja, por exemplo, Foo[]), mas tipos de valor (como int[]) não pode ser. Então você poderia tentar:

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

Mas se é algo como int[], você terá que fazer loop manualmente.

Você pode usar Array.ConvertAll, assim:

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

Abordagem simples e básica;

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 apenas uma outra abordagem: você pode usar personNames.ToArray também:

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

Provavelmente, isso pode ser comprimido, mas contorna a limitação de não poder usar o elenco <> ou Linq selecione em um sistema de sistema.

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));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top