2013-07-04 272 views
2
Dictionary<int, String> loadData = new Dictionary(); 

// File contains a list of filenames say for ex. 5 filenames 
foreach (var file in filenames) 
{ 
    // I want to assign like this 
    loadData[id]=file; 
} 

我如何在C#中分配loadData(key,value),這樣我可以訪問諸如loadData[5] = "hello.txt";分配字典鍵值

回答

1

首先:您正在使用new Dictionary(),這將無法正常工作。改爲使用new Dictionary<int, String>()

第二:id從哪裏來?如果它只是一個計數器,你可以做到以下幾點:

Dictionary<int, String> loadData = new Dictionary<int, String>(); 
int id = 0; 
foreach (string file in filenames) 
{ 
    loadData.Add(id++, file); 
} 
+0

我已經嘗試過它的工作,但在響應我得到這個錯誤類型'System.Collections.Generic.Dictionary'2 [[System.Int32,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089],[ System.String,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]不支持字典的序列化/反序列化,鍵必須是字符串或對象。 – Mazher

+0

@Mazher這可能是因爲你使用非泛型構造函數初始化你的字典。我使用正確的字典更新了我的答案。 –

+0

我用你描述的,但我仍然得到相同的錯誤'鑰匙必須是字符串或對象',我的id不是計數器變量我從模型0123導出它 – Mazher

0

保留一個計數器。

int i = 0; 
foreach (var file in filenames) { 
    ++i; 
    loadData[i] = file; 
} 

filenames中的第一項分配給loadData[1]

+0

我不認爲你可以通過索引訪問'Dictionary'的元素。 – computer10171

+0

你可以。 C#不是Java。 '[] ='和'.Add'之間的區別在於,如果密鑰已經存在,則後者會拋出異常,而前者會覆蓋任何現有的值。 – 2013-07-04 13:03:36

+0

沒關係,我沒有意識到鍵是一個int類型。 – computer10171

0

我想通過ID,它不是在file值,但該項目在循環索引

filenames.ForEach(x => loadData.Add(loadData.Count, x)); 

這會給你

Key Value 
0  First filename 
1  Second filename 
2  Third filename 
etc... 

如果我理解正確,這就是你想要的。或者你有單獨的Key並想通過某種索引(如列表)訪問字典?

0

這很簡單。 你可以使用它。

loadData.Add(1,"fileName1");

或者你把這個行內循環。

0

使用ToDictionary()擴展方法...

int id = 1; 
var loadData = filenames.ToDictionary(x => id++); 
+0

在這種情況下,您不需要指定值,因爲它默認爲Enumerable的類型 –

+0

好喊。我會更新 – NinjaNye

1

如果id只是一個計數器,你可以使用數組,仍然可以寫loadData[5]="hello.txt";

var loadData = filenames.ToArray(); 
loadData[5]="hello.txt"; 
0

做的另一種方式。

var loadData = fileNames 
       .Select((fn,index)=> new {key = index, value = fn}) 
       .ToDictionary(x=> x.key, x=> x.value);