Лучший способ конвертировать Object [] в String [] или List <String> - PullRequest
12 голосов
/ 22 февраля 2011

У меня есть строка данных. Я могу получить предметы в нем, используя свойство dataRow.ItemArray, которое имеет тип object[]. Мне нужно преобразовать это в String[] или List<String>

Я вижу методы ToArray<> и ToList<>. но не знаю, как его использовать. Пожалуйста, помогите.

Заранее спасибо

Ответы [ 5 ]

20 голосов
/ 22 февраля 2011

У вас есть два варианта в зависимости от реальных объектов в dataRow.ItemArray

Если в объекте [] действительно есть строковые объекты, вы можете просто привести элемент мудро.

dataRow.ItemArray.OfType<string>().ToList();

, ноесли объекты другого типа, например, int или что-то еще, вам нужно преобразовать строку в строку (в этом примере с .ToString(), но в вашем случае может потребоваться другой пользовательский метод

dataRow.ItemArray.Select(o => o.ToString()).ToList();

Редактировать:
Если вам явно не нужно List<string> или string[], вы можете опустить .ToList() и получить вместо него IEnumerable<string>.

9 голосов
/ 22 февраля 2011
 object[] a = new object[10];
 string[] b = Array.ConvertAll(a, p => (p ?? String.Empty).ToString())

(вторая строка, которую вы хотите)

4 голосов
/ 22 февраля 2011
List<string> strList = objArray.Cast<String>();

Сначала вы можете проверить наличие нулей:

List<string> strList = objArray.Select( o => o == null ? String.Empty : o.ToString() ).ToList();
4 голосов
/ 22 февраля 2011

Вы можете использовать System.Array.ConvertTo с System.Convert.ToString в качестве делегата.

3 голосов
/ 22 февраля 2011

ToArray и ToList не будут делать то, что вы хотите, поскольку они будут только возвращать массив объектов или список. Сначала вам нужно объединить данные в строки, и Select может помочь. Попробуйте это:

 dataRow.ItemArray.Select(i => i == null ? string.Empty : i.ToString()).ToArray();
...