Ответ 1
Используете ли вы С# 3.0 с LINQ? Это довольно легко:
List<string> fields = values.Select(i => i.ToString()).ToList();
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
...
}
Используете ли вы С# 3.0 с LINQ? Это довольно легко:
List<string> fields = values.Select(i => i.ToString()).ToList();
Если у вас есть LINQ (в .NET 3.5) и С# 3.0 (для методов расширения), то есть довольно приятный один лайнер:
var list = values.Cast<string>().ToList();
Вы не получите ничего более короткого, чем то, что вы разместили для .NET 2.0/С# 2.0.
Предостережение: Я просто понял, что ваш object[]
не обязательно имеет тип string
. Если это действительно так, пойдите с методом Мэтта Гамильтона, который хорошо выполняет эту работу. Если элемент вашего массива имеет тип string
, тогда мой метод, конечно, будет работать.
С# 2.0:
List<string> stringList = new List<string>(Array.ConvertAll<object,string>(values, new Converter<object,string>(Convert.ToString)));
Еще один вариант, который может быть правильным:
List<string> list = values.OfType<string>().ToList();
Это будет отфильтровывать любые объекты в исходном списке, которые не являются объектами string
, вместо того, чтобы бросать исключение или пытаться преобразовать их все в строки.
Array.ConvertAll(inputArray, p => p.ToString())
Это преобразует массив типа object
в массив string
. Вы можете преобразовать в массив другого типа, изменив выражение лямбда.
Пока не один вкладыш в отношении объявления List < > дает вам такой же эффект, не требуя Linq.
List<string> list = new List<string>();
Array.ForEach(values, value => list.Add(value.ToString()));