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