Кастинг целого массива объектов представить в виде строки

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

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

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

17
задан bluish 5 July 2011 в 14:11
поделиться

9 ответов

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

string[] output = (from o in objectArray
                   select o.ToString()).ToArray()
12
ответ дан 30 November 2019 в 11:08
поделиться
 object[] objects;
 ..
 string[] result = Array.ConvertAll(objects, 
        new Converter<object, string>(Obj2string));
 public static string Obj2string(object obj)
 {
    return obj.ToString();
 }
1
ответ дан 30 November 2019 в 11:08
поделиться
string[] str = new string[myObjects.Length];
for (int i = 0; i < myObjects.Length; ++i)
    str[i] = myObjects[i].ToString();

ИЛИ:

List<string> lst = new List<string>();
foreach (object o in myObjects)
    list.Add(o.ToString());
return list.ToArray();
0
ответ дан 30 November 2019 в 11:08
поделиться
object[] data = new object[] { "hello", "world", 1, 2 };

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

Безумное обновление вопроса...

0
ответ дан 30 November 2019 в 11:08
поделиться

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

  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[] {};
  }

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

0
ответ дан 30 November 2019 в 11:08
поделиться

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

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

list.Cast<string>();

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

list.Select(o => o.ToString()).ToArray();
0
ответ дан 30 November 2019 в 11:08
поделиться
string[] output = Array.ConvertAll(objects, item => item.ToString());
13
ответ дан 30 November 2019 в 11:08
поделиться
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());
15
ответ дан 30 November 2019 в 11:08
поделиться
string[] myStringArray = myObjectArray.Cast<string>().ToArray();

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

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

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

3
ответ дан 30 November 2019 в 11:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: