C# 为键值分配字典 Dictionary loadData=newdictionary(); //文件包含一个文件名列表,例如5个文件名 foreach(文件名中的var文件) { //我想这样分配 loadData[id]=文件; }

C# 为键值分配字典 Dictionary loadData=newdictionary(); //文件包含一个文件名列表,例如5个文件名 foreach(文件名中的var文件) { //我想这样分配 loadData[id]=文件; },c#,asp.net,C#,Asp.net,如何在C语言中分配loadData(key,value),以便像loadData[5]=“hello.txt”那样访问 保留一个计数器 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 lik

如何在C语言中分配
loadData(key,value)
,以便像
loadData[5]=“hello.txt”
那样访问

保留一个计数器

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;
}

这会首先将
文件名中的第一项分配给
加载数据[1]

:您使用的是
新字典()
,无法正常工作。改用
newdictionary()

第二:
id
来自哪里?如果它只是一个计数器,您可以执行以下操作:

int i = 0;
foreach (var file in filenames) {
    ++i;
    loadData[i] = file;
}
Dictionary loadData=newdictionary();
int id=0;
foreach(文件名中的字符串文件)
{
loadData.Add(id++,文件);
}

我假设通过
ID
,它不是
文件中的值,而是循环中项目的索引

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

filenames.ForEach(x => loadData.Add(loadData.Count, x));
如果我理解正确,这就是你想要的。或者您是否有一个单独的
,并希望通过某种索引(如列表)访问词典?

这非常简单。 你可以用这个

loadData.Add(1,“fileName1”)


或者将这一行放在循环中。

使用
ToDictionary()
扩展方法

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

如果
id
只是一个计数器,您可以使用数组,仍然可以写入
loadData[5]=“hello.txt”


另一种方法

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

我认为你不能通过索引访问
字典的元素,你可以。C#不是Java。
[]=
.Add
之间的区别在于,如果键已经存在,后者会引发异常,而前者会覆盖任何现有值。我已经尝试过它,但在响应时,我得到的错误类型是“System.Collections.Generic.Dictionary`2”[[System.Int32,mscorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089],[System.String,mscorlib,版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089]]字典的序列化/反序列化不支持,键必须是字符串或对象。@Mazher这可能是因为您使用非泛型构造函数初始化了字典。我使用了正确的字典更新了答案。我使用了如您所述的方法,但仍然收到相同的错误“键必须是字符串或对象”,我的id不是计数器变量我从Model派生它当我使用dictionary作为new dictionary()时,我得到了正确的响应;为什么是这样!在这种情况下,您不需要指定值,因为默认情况下它是可枚举的类型
var loadData = filenames.ToArray();
loadData[5]="hello.txt";
var loadData = fileNames
              .Select((fn,index)=> new {key = index, value = fn})
              .ToDictionary(x=> x.key, x=> x.value);