Как преобразовать объект [] в список <string> в одной строке С# 3.0?

ok Я сдаюсь, как вы это делаете в одной строке?

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    //List<string> fields = values.ToList<string>();
    //List<string> fields = values as List<string>;
    //List<string> fields = (List<string>)values;

    List<string> fields = new List<string>();
    foreach (object value in values)
    {
        fields.Add(value.ToString());
    }

    //process the fields here knowning they are strings
    ...
}

Ответы

Ответ 1

Используете ли вы С# 3.0 с LINQ? Это довольно легко:

List<string> fields = values.Select(i => i.ToString()).ToList();

Ответ 2

Если у вас есть LINQ (в .NET 3.5) и С# 3.0 (для методов расширения), то есть довольно приятный один лайнер:

var list = values.Cast<string>().ToList();

Вы не получите ничего более короткого, чем то, что вы разместили для .NET 2.0/С# 2.0.

Предостережение: Я просто понял, что ваш object[] не обязательно имеет тип string. Если это действительно так, пойдите с методом Мэтта Гамильтона, который хорошо выполняет эту работу. Если элемент вашего массива имеет тип string, тогда мой метод, конечно, будет работать.

Ответ 3

С# 2.0:

List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString)));

Ответ 4

Еще один вариант, который может быть правильным:

List<string> list = values.OfType<string>().ToList();

Это будет отфильтровывать любые объекты в исходном списке, которые не являются объектами string, вместо того, чтобы бросать исключение или пытаться преобразовать их все в строки.

Ответ 5

Array.ConvertAll(inputArray, p => p.ToString())

Это преобразует массив типа object в массив string. Вы можете преобразовать в массив другого типа, изменив выражение лямбда.

Ответ 6

Пока не один вкладыш в отношении объявления List < > дает вам такой же эффект, не требуя Linq.

List<string> list = new List<string>();
Array.ForEach(values, value => list.Add(value.ToString()));