2014-10-17 35 views
0
FSharpList<FSharpList<int>> newImageList; 
FSharpList<int> row; 
for(int i = 0; i < CurrentImage.Header.Height) 
{ 
    row = PPMImageLibrary.GrayscaleImage(CurrentImage.ImageListData); 
    newImageList.Head = row; 
} 

上面我試圖採取一個int list列表並將每個索引設置爲int列表中的行。很明顯,我不能用.Head這樣做,如果可以的話,它只會改變第一個索引。我想知道如何做這項工作,我很難得到任何索引的newImageList首先。在C#中更改FSharpList

+0

像我肯定是有Collection.Add方法你是剛分配newImage.Head,我認爲你應該添加任何收藏特定的行或列索引到newImageList集合..但我不知道FSharp – MethodMan 2014-10-17 16:48:35

+3

'FSharpList'實例是不可變的,因此您不能更改它們。如果您確實想要更改列表,則必須根據現有的列表構建新的列表,並根據需要修改元素。 – Iridium 2014-10-17 17:25:13

回答

4

FSharpList是不可變列表。因此你不能指定它的Head和Tail屬性。但是,您可以嘗試將FSharp列表添加到通用C#列表或任何繼承IEnumerable的集合中。例如從您的代碼:

List<int> newImageList = new List<int>(); 

for(int i = 0; i < CurrentImage.Header.Height) 
{ 
    newImageList.AddRange(PPMImageLibrary.GrayscaleImage(CurrentImage.ImageListData)); // I am assuming your GrayscaleImage method might return multiple records. 

} 

我希望這可以幫助。

+1

我不認爲這種擴展方法是必要的。 F#列表已經實現了IEnumerable,所以直接C#轉換就是你所需要的。 – 2014-10-17 17:50:16

+0

@JoelMueller你是對的。我只檢查FSharpList的繼承,它繼承IEnumerable。謝謝你的提醒。 – 2014-10-17 17:52:36