Приведение всего массива объектов в строку - PullRequest
17 голосов
/ 03 августа 2010

У меня есть массив типа object, которые являются строками.Я хотел бы преобразовать их в строки.Какой самый быстрый способ сделать это?

Например: у меня есть object[], и я хочу преобразовать его, чтобы оно было string[].

ОБНОВЛЕНИЕ: Я думаю, проблемаявляется то, что некоторые объекты на object[] на самом деле являются другими объектами, такими как целые числа.Мне нужно было бы сначала преобразовать их в строки.Пожалуйста, включите это в ваше решение.Спасибо.

Ответы [ 9 ]

15 голосов
/ 03 августа 2010
object[] data = new object[] { "hello", "world", "!" };

string[] stringData = data.Cast<string>().ToArray();

Если ваш массив объектов содержит смешанные элементы, вы можете использовать ConvertAll метод Array:

object[] data = new object[] { "hello", 1, 2, "world", "!" };

string[] stringData = Array.ConvertAll<object, string>(data, o => o.ToString());
13 голосов
/ 03 августа 2010
string[] output = Array.ConvertAll(objects, item => item.ToString());
12 голосов
/ 03 августа 2010

Вероятно, не самый эффективный способ сделать это ... он имеет преимущество работы, когда объекты не обязательно являются строками.

string[] output = (from o in objectArray
                   select o.ToString()).ToArray()
3 голосов
/ 03 августа 2010
string[] myStringArray = myObjectArray.Cast<string>().ToArray();

или если вы используете ключевое слово var:

var myStringArray = myObjectArray.Cast<string>();

Использование Cast не вызовет исключение, если любая из ваших строк равна нулю.

1 голос
/ 03 августа 2010
 object[] objects;
 ..
 string[] result = Array.ConvertAll(objects, 
        new Converter<object, string>(Obj2string));
 public static string Obj2string(object obj)
 {
    return obj.ToString();
 }
0 голосов
/ 03 августа 2010

Поскольку все объекты уже являются строками, это сложная работа.Более безопасный способ может быть следующим:

  private static void Conversions()
  {
     var strings = Convert(new object[] {"a", "b"});
     var strings2 = Convert(new object[] {});
  }

  private static string[] Convert(IEnumerable<object> objects)
  {
     return objects as string[] ?? new string[] {};
  }

Эта реализация всегда возвращает строковый массив, потенциально пустой.Код на стороне клиента может быть реализован на основе этого предположения, и вам не нужно проверять возвращаемое значение на ноль.

0 голосов
/ 03 августа 2010

Вы не можете использовать Enumerable.Cast, если некоторые объекты в массиве являются целыми числами, при выполнении этого выдается InvalidCastException:

var list = new object[] { "1", 1 };

list.Cast<string>();

Вместо этого попробуйте ответ cristobalito или лямбдуСинтаксический эквивалент:

list.Select(o => o.ToString()).ToArray();
0 голосов
/ 03 августа 2010
object[] data = new object[] { "hello", "world", 1, 2 };

string[] strings = data.Select(o => o == null ? null : o.ToString()).ToArray();

Обновление сумасшедшего вопроса там ...

0 голосов
/ 03 августа 2010
string[] str = new string[myObjects.Length];
for (int i = 0; i < myObjects.Length; ++i)
    str[i] = myObjects[i].ToString();

OR

List<string> lst = new List<string>();
foreach (object o in myObjects)
    list.Add(o.ToString());
return list.ToArray();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...