将System.Array转换为string []

时间:2009-12-28 18:07:43

标签: c# .net arrays system.array

我有一个System.Array,我需要转换为string []。有没有更好的方法来做到这一点,而不仅仅是循环遍历数组,在每个元素上调用ToString,并保存到字符串[]?问题是我不一定知道元素的类型,直到运行时。

5 个答案:

答案 0 :(得分:66)

如何使用LINQ?

string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();

答案 1 :(得分:13)

只是Array吗?或者是(例如)object[]?如果是这样的话:

object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);

注意,任何一维引用类型数组都应该可以转换为object[](即使它实际上是Foo[]),但是值类型(例如{{1}不可能。所以你可以试试:

int[]

但如果它类似于Array a = ... object[] arr = (object[]) a; string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString); ,则必须手动循环。

答案 2 :(得分:4)

您可以使用Array.ConvertAll,如下所示:

string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);

答案 3 :(得分:1)

简单而基本的方法;

Array personNames = Array.CreateInstance(typeof (string), 3);
// or Array personNames = new string[3];
personNames.SetValue("Ally", 0);
personNames.SetValue("Eloise", 1);
personNames.SetValue("John", 2);

string[] names = (string[]) personNames; 
// or string[] names = personNames as string[]

foreach (string name in names)
    Console.WriteLine(name);

或者只是另一种方法:您也可以使用personNames.ToArray

string[] names = (string[]) personNames.ToArray(typeof (string));

答案 4 :(得分:0)

这可能会被压缩,但它克服了无法使用Cast&lt;&gt;的限制。或Linq在System.Array类型的对象上选择。

Type myType = MethodToGetMyEnumType();
Array enumValuesArray = Enum.GetValues(myType);
object[] objectValues new object[enumValuesArray.Length];
Array.Copy(enumValuesArray, objectValues, enumValuesArray.Length);

var correctTypeIEnumerable = objectValues.Select(x => Convert.ChangeType(x, t));