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