将System.Array转换为string

我有一个System.Array,我需要转换为string[]。 有没有更好的方法来做到这一点,只是循环访问数组,每个元素调用ToString,并保存到一个string[]? 问题是我不一定知道元素的types,直到运行时。

如何使用LINQ?

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

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

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

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

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

但是,如果它是像int[]这样的东西,你将不得不手动循环。

你可以使用Array.ConvertAll ,像这样:

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

这可能会被压缩,但它绕过了无法使用Cast <>或Linq Select在System.Arraytypes的对象上的限制。

 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)); 

简单和基本的方法;

 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));