将System.Array转换为字符串[
-
21-09-2019 - |
题
我有一个系统。我需要转换为字符串[]。有没有更好的方法来做到这一点,而不是仅在数组中循环循环,在每个元素上调用ToString并保存到字符串[]?问题是我不一定要在运行时知道元素的类型。
解决方案
使用LINQ怎么样?
string[] foo = someObjectArray.OfType<object>().Select(o => o.ToString()).ToArray();
其他提示
是 Array
?还是(例如) object[]
?如果是这样:
object[] arr = ...
string[] strings = Array.ConvertAll<object, string>(arr, Convert.ToString);
注意比任何1D参考类型的阵列都应铸造为 object[]
(例如,即使实际上是 Foo[]
),但是值类型(例如 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);
简单而基本的方法;
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));
这可能会被压缩,但是它围绕着无法在系统上使用cast <>或linq选择的限制。对象的阵列类型。
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));
不隶属于 StackOverflow