2009-12-28 357 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));