46

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

4

5 回答 5

72

使用 LINQ 怎么样?

string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
于 2009-12-28T18:11:03.117 回答
13

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

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

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

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

但如果它是类似的int[],你将不得不手动循环。

于 2009-12-28T18:30:13.220 回答
4

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

string[] strp = Array.ConvertAll<int, string>(arr, Convert.ToString);
于 2010-12-22T06:45:56.557 回答
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));
于 2017-10-01T11:25:05.280 回答
0

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

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));
于 2014-06-25T19:26:32.177 回答