Конвертировать System.Array в String [
-
21-09-2019 - |
Вопрос
У меня есть система. Оррей, что мне нужно преобразовать в строку []. Есть ли лучший способ сделать это, чем просто зацикливаться на массиве, вызывая ToString на каждом элементе и сохранение на строке []? Проблема в том, что я не обязательно знаю тип элементов до выполнения времени.
Решение
Как насчет использования LINQ?
string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
Другие советы
Это просто Array
? Или это (например) object[]
? Если так:
object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
ПРИМЕЧАНИЕ, чем любой 1-D массив эталонных типов должен быть подготовлен для object[]
(даже если это на самом деле, например, Foo[]
), но типы стоимости (например int[]
) не может быть. Итак, вы можете попробовать:
Array a = ...
object[] arr = (object[]) a;
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
Но если это что -то вроде int[]
, вам придется зацикливаться вручную.
Вы можете использовать Array.ConvertAll
, как это:
string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
Простой и базовый подход;
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);
Или просто другой подход: вы можете использовать personNames.ToArray
слишком:
string[] names = (string[]) personNames.ToArray(typeof (string));
Это, вероятно, можно сжать, но оно оборачивает ограничение неспособности использовать Cast <> или Linq Select в системе. Тип объекта.
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));