Ответ 1
Вероятно, это не самый эффективный способ сделать это... он имеет преимущество при работе, когда объекты не обязательно являются строками.
string[] output = (from o in objectArray
select o.ToString()).ToArray()
У меня есть массив типа object
, который является строкой. Я хотел бы преобразовать их в строки. Каким будет самый быстрый способ сделать это?
Например: у меня есть этот object[]
и вы хотите его преобразовать, так что это string[]
.
UPDATE: Я думаю, проблема в том, что некоторые из объектов на object[]
на самом деле являются другими объектами, такими как целые числа. Сначала мне нужно было преобразовать их в строки. Пожалуйста, включите это в свое решение. Спасибо.
Вероятно, это не самый эффективный способ сделать это... он имеет преимущество при работе, когда объекты не обязательно являются строками.
string[] output = (from o in objectArray
select o.ToString()).ToArray()
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());
string[] output = Array.ConvertAll(objects, item => item.ToString());
string[] myStringArray = myObjectArray.Cast<string>().ToArray();
или если вы используете ключевое слово var
:
var myStringArray = myObjectArray.Cast<string>();
Использование Cast
не будет генерировать исключение, если любая из ваших строк равна нулю.
object[] objects;
..
string[] result = Array.ConvertAll(objects,
new Converter<object, string>(Obj2string));
public static string Obj2string(object obj)
{
return obj.ToString();
}
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();
object[] data = new object[] { "hello", "world", 1, 2 };
string[] strings = data.Select(o => o == null ? null : o.ToString()).ToArray();
Сумасшедшее обновление вопроса...
Вы не можете использовать Enumerable.Cast, если какой-либо из объекта в массиве является целым числом, он будет вызывать InvalidCastException, когда вы это сделаете:
var list = new object[] { "1", 1 };
list.Cast<string>();
Вместо этого попробуйте ответить cristobalito или эквивалент синтаксиса лямбда:
list.Select(o => o.ToString()).ToArray();
Так как все объекты уже являются строками, они работают на жестком листе. Более безопасный способ может использовать следующее:
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.