Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Преобразовать object[] в string[]

#c_sharp #массивы #строки #объекты


Собственно вопрос в шапке.

Есть некий массив object[] состоящий из Guid'ников, нужно этот массив преобразовать
в string[]. 

Пробовал так:

var strings = objects as string[];


Но получил null.

Есть какой-то способ избежать цикла и скастить всё это сразу?
    


Ответы

Ответ 1



Метод: Array.ConvertAll - преобразует массив одного типа в массив другого типа. Вариант #1 object[] inputArray = new object[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }; string[] resultArray = Array.ConvertAll(inputArray, x => x?.ToString() ?? string.Empty); Ссылка на источник: Converting a Object[] array to an string[] array in C# (ConvertAll method) Вариант #2 string ConvertObjectToString(object obj) { return obj?.ToString() ?? string.Empty; } object[] input = new object[] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }; string[] result = Array.ConvertAll(input, ConvertObjectToString); Ссылка на источник: Converting a Object[] array to an string[] array in C# (Array.ConvertAll Method)

Ответ 2



var strings = objects.Select(x => x?.ToString()).ToArray();

Ответ 3



Вариант №1 var objects = new Object[3] { Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D") }; var strings = objects.Cast(); Вариант №2 var MyObjects = new Object[3] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() }; var MyStrings = MyObjects.Cast(); public static IEnumerable Cast(this IEnumerable source) { return source.CastIterator(); } public static IEnumerable CastIterator(this IEnumerable source) { return source.ExpressionToFunc(); } public static IEnumerable ExpressionToFunc(this IEnumerable source) { foreach (var obj in source) { var exp = Expression.Constant(obj.ToString()); var type = Expression.TypeAs(exp, typeof(TResult)); var compile = Expression.Lambda>(type).Compile(); yield return compile(); } }

Комментариев нет:

Отправить комментарий