2013-07-04 273 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);