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

147
10 июня 2019, 00:20

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

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

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

var strings = objects as string[];

Но получил null.

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

Answer 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<object, string>(input, ConvertObjectToString);

Ссылка на источник: Converting a Object[] array to an string[] array in C# (Array.ConvertAll Method)

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

Вариант №1

    var objects = new Object[3] { Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D"), Guid.NewGuid().ToString("D") };
    var strings = objects.Cast<String>();

Вариант №2

    var MyObjects = new Object[3] { Guid.NewGuid(), Guid.NewGuid(), Guid.NewGuid() };
    var MyStrings = MyObjects.Cast<Object, String>();
    public static IEnumerable<TResult> Cast<TInput, TResult>(this IEnumerable<TInput> source)
    {
        return source.CastIterator<TInput, TResult>();
    }
    public static IEnumerable<TResult> CastIterator<TInput, TResult>(this IEnumerable<TInput> source)
    {
        return source.ExpressionToFunc<TInput, TResult>();
    }
    public static IEnumerable<TResult> ExpressionToFunc<TInput, TResult>(this IEnumerable<TInput> source)
    {
        foreach (var obj in source)
        {
            var exp = Expression.Constant(obj.ToString());
            var type = Expression.TypeAs(exp, typeof(TResult));
            var compile = Expression.Lambda<Func<TResult>>(type).Compile();
            yield return compile();
        }
    }
READ ALSO
WPF C# Обращение к объекту через ссылку

WPF C# Обращение к объекту через ссылку

Пытаюсь обратиться к элементу из ссылок таким образом:

138
Загрузка таблицы одновременно с формой

Загрузка таблицы одновременно с формой

Суть проблемы: при загрузке формы выполнялся запрос на выборку из таблицы на большое кол-во записей и при открытии формы ничего не появлялось...

133
Как может быть deadlock для выборки из базы?

Как может быть deadlock для выборки из базы?

Разбираюсь в не своем коде, там много обращений в БД(MS SQL SERVER) с использованием generic репозитория и много очень запутанного кода(поэтому его...

157
Как вызвать ошибку понятную для COM?

Как вызвать ошибку понятную для COM?

Как реализовать вызов ошибки, как com-объект?

168