我有一个类型为object
的数组,其中存储的是字符串。我想将它们转换为字符串数组,最快的方法是什么?
例如:我有这个object[]
数组,希望将其转换为string[]
数组。
更新:我认为问题在于object[]
中的某些对象实际上是其他对象,比如整数。我需要先将它们转换为字符串。请将此纳入您的解决方案。谢谢。
object[] data = new object[] { "hello", "world", "!" };
string[] stringData = data.Cast<string>().ToArray();
如果您的对象数组包含混合元素,可以使用Array
的ConvertAll
方法:
object[] data = new object[] { "hello", 1, 2, "world", "!" };
string[] stringData = Array.ConvertAll<object, string>(data, o => o.ToString());
Array
已经实现了一个转换方法,为什么还要使用 List
类的 ConvertAll
方法呢?请检查我的答案以了解如何正确地执行此操作。 - Jaroslav Jandekstring[] output = Array.ConvertAll(objects, item => item.ToString());
可能不是最有效的方法...但它的好处在于在对象不一定是字符串时也可以工作。
string[] output = (from o in objectArray
select o.ToString()).ToArray()
ToString
?您只需要将项目强制转换为 string
。此外,out
是一个保留关键字 ;) - Thomas LevesqueArray.ConvertAll
),LINQ 只会让它变慢(例如:不是最快的方式-不适用于 CPU 或程序员)。 - Jaroslav Jandekfrom ... select
语法很好,但是 objectArray.Select(o => o.ToString()).ToArray();
实际上更加简洁。 - Peter Lillevoldstring[] myStringArray = myObjectArray.Cast<string>().ToArray();
或者如果您正在使用var
关键字:
var myStringArray = myObjectArray.Cast<string>();
如果你的字符串中有任何一个为null,使用Cast
将不会抛出异常。
Cast<T>()
返回一个 IEnumerable<T>
,你需要使用 ToArray()
来使其编译通过。 - Dirk Vollmarvar
的版本可以编译,但会创建一个 IEnumerable<string>
而不是一个字符串数组。 - Dirk Vollmar 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();
如果数组中的某些对象是整数,您不能使用Enumerable.Cast,否则在执行以下操作时会抛出InvalidCastException:
var list = new object[] { "1", 1 };
list.Cast<string>();
相反地,请尝试cristobalito的答案或者lambda语法的等价形式:
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[] {};
}
object[] data = new object[] { "hello", "world", 1, 2 };
string[] strings = data.Select(o => o == null ? null : o.ToString()).ToArray();
有个疯狂的问题更新在那里...