2009-12-28 87 views
39

我有一个System.Array,我需要转换为字符串[]。有没有更好的方式来做到这一点,而不仅仅是循环访问数组,在每个元素上调用ToString并保存为字符串[]?问题是我直到运行时才知道元素的类型。转换System.Array到字符串[]

+0

不知道的类型,直到运行时,你基本上是需要遍历数组在(与LINQ或任何方法吧)。 – GrayWizardx 2009-12-28 18:10:23

+0

(回复评论) – 2009-12-28 19:04:47

回答

61

如何使用LINQ?

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

我似乎无法访问我的数组中的.Select方法。我错过了什么吗? – KrisTrip 2009-12-28 18:18:50

+3

是的,将'System.Linq'添加到''using''中 – 2009-12-28 18:19:56

+0

请确保您使用的是C#3,并且已经包含了System.Linq命名空间。 – LBushkin 2009-12-28 18:20:16

13

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

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

注比的引用类型的任何1-d阵列应被强制转换为object[](即使它实际上是,例如,Foo[]),但值类型(如int[])可以”不要。所以,你可以尝试:

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

但如果是像int[],你必须手动循环。

+0

它只是数组,它实际上可能包含值类型(可能会)。 – KrisTrip 2009-12-28 18:37:05

+0

@KrisTrip - *变量*可能是“只是数组”,但对象不会;它有一个确定的数组类型。在“包含值类型”('object []'可以做的)和“是一个值类型数组”(如'int []')之间也有**大**差异。这种差异在这种情况下很重要。你能澄清一下**'Array'实例是什么吗? – 2009-12-28 19:04:14

+0

我使用ToArray方法获取数组。我不知道,直到运行时,但它可能是一个int [],双[],浮动[],字符串[]或复杂[](用户定义的对象) – KrisTrip 2009-12-28 19:28:18

4

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

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

这或许可以被压缩,但都绕不能够的限制使用Cast <>或LINQ选择上的System.Array类型目的。

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

仍然是一个通用对象数组。 – 2014-12-01 06:38:22

0

简单和基本的方法;

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