2013-10-18 29 views
2

我想從其他元素的列表中填充我的類型數組。所有這些我都想在foreach循環中完成。如何從foreach中的其他元素列表中填充數組?

可能嗎?

它是如何做到現在:

// Temp list 
List<Parameter> inputData = new List<Parameter>(); 

// going through collection from which i want to copy 
foreach (var parameter in parametersWindow.Parameters) 
{ 
    inputData.Add(new Parameter() { Name = parameter.Name, Value = parameter.Value }); 
} 

// Convertation to array. 
Parameter[] parametersToInput = inputData.ToArray(); 

這就是我想這樣做:

Parameter[] parametersToInput = new Parameter[parametersWindow.Parameters.Count] 

foreach (var param in parametersWindow.Parameters) 
{ 
    // parametersToInput.add(new Parameter(parameter)) 
} 

誰能幫助我?

+0

您可以將陣列複製到一個新的無環路使用['Array.Copy'(http://msdn.microsoft.com/en-us/library/system。 array.copy.aspx)靜態方法。 –

+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

回答

2

一個數組沒有Add方法,因爲它不能調整大小。因此,要麼使用List,要麼從列表中使用LINQToArray,要麼正確調整數組大小並使用for -loop。

LINQ的做法是:

Parameter[] parametersToInput = parametersWindow.Parameters.ToArray(); 

列表:

List<Parameter> parametersToInput = parametersWindow.Parameters.ToList(); 

List<Parameter> parametersToInpu = new List<Parameter>(parametersWindow.Parameters); 

陣列換環方法:

Parameter[] parametersToInput = new Parameter[parametersWindow.Parameters.Count]; 
for (int i = 0; i < parametersWindow.Parameters.Count; i++) 
    parametersToInput[i] = parametersWindow.Parameters[i]; 

更新由於parametersWindow.Parameters不是Parameter你定義創建一個:

Parameter[] parametersToInput = parametersWindow.Parameters 
    .Select(p => new Parameter { Name = p.Name, Value = p.Value}) 
    .ToArray(); 
+0

不幸的是parametersWindow.Parameters的數據不是「參數」。所以它需要某種「轉換」... – user2706838

+1

數組不是一成不變的。也許你想說「固定大小」。 –

+0

@ AhmedKRAIEM:那是個不幸的選擇。更正了,謝謝。 –

0

我缺少的東西?你可以做到這一點是完整的LINQ,沒有搞亂循環。

Parameter[] parametersToInput = parametersWindow.Select(p => p.Parameters).ToArray(); 

在線。沒有戲劇。

如果您想執行額外的處理;

Parameter[] parametersToInput = parametersWindow.Select(p => 
{ 
    ProcessParameters(p); 
    return p.Parameters; 
}).ToArray(); 

Select方法是1對1類型轉換的理想方法。隨着LINQ,我不知道爲什麼你會做任何其他方式:)

+0

我明白,「foreach循環」而不是** foreach **的問題要求並不一定是該工作最適合的工具。 – Gusdor

0

您可以使用LINQ:

Parameter[] parametersToInput = parametersWindow.Parameters 
            .Select(p => 
             new Parameter() { 
              Name = p.Name, Value = p.Value }) 
            .ToArray(); 
0

如果你真的向wan't做Foreach循環,你可以試試這個:

//Your List 
List<Parameter> inputData = new List<Parameter>(); 

//Fill Your List Here  

//Your Array 
Parameter[] parametersToInput = new Parameter[inputData.Count]; 

//Filling Your Array from Your List 
int index = 0; 
inputData.ForEach(e => parametersToInput[index++] = e); 
相關問題