2017-06-12 33 views
2

我有一些動態列表集合,這是在運行時添加的。我想將這些ListColl轉換爲對象數組。以下是我的代碼將列表<double>轉換爲對象[]

List<double> ListColl = new List<double>(); 
// This is added dynamically and finally want to convert this list into object array 
    values.Add(10); 
    values.Add(40); 
    values.Add(20); 

預期成果是這樣

object[] objArray = new object[] { 10, 40, 20 }; 

我用​​。但是這是拋出錯誤。

如何這個名單收集轉換爲對象

+3

」但是這是拋出錯誤。「 - 總是指定錯誤是什麼。 –

+4

當問題與asp.net真正相關時,請僅使用asp.net標記 - 這裏沒有* asp.net特定的。 –

+0

錯誤將是因爲ListColl.ToArray()將產生一個double類型的數組,而不是一個類型爲object的數組。 (object []!= double []) – TomTom

回答

2

有兩種方法achiving如此,一個與其他casting人會LINQ

鑄造:

object[] objArray = ListColl.Cast<object>().ToArray(); 

LINQ:

var objArray = (from item in ListColl select item as object).ToArray(); 
+4

技術上這兩個都使用Linq,但第一個使用'Method'語法,而第二個使用'Query'語法。 –

0

由於LINQ罩下使用的IEnumerable,可能的是,在一些其他的答案所提供的結果是通過一次或多次調整目標陣列提供,作爲ToArray的()方法可能事先不知道列表中有多少元素。如果這些性能方面的考慮是重要的,也許你想編寫自己的擴展方法,像這樣:

public static object[] ToObjArray<T>(this List<T> source) 
{ 
    var objArray = new object[source.Count]; 
    for (int i = 0; i < source.Count; i++) 
     objArray[i] = source[i]; 
    return objArray; 
} 

這將撥出所需的準確大小的數組,並使用項目不斷地訪問,使得用於執行時間線性的列表長度。 「