使用 Enumerable.Range() 填充字典的问题

Posted

技术标签:

【中文标题】使用 Enumerable.Range() 填充字典的问题【英文标题】:Problem in populating a dictionary using Enumerable.Range() 【发布时间】:2011-02-14 23:55:19 【问题描述】:

如果我这样做

for (int i = 0; i < appSettings.Count; i++)

   string key = appSettings.Keys[i];
   euFileDictionary.Add(key, appSettings[i]);

它工作正常。

当我尝试使用相同的东西时

Enumerable.Range(0, appSettings.Count).Select(i =>

   string Key = appSettings.Keys[i];
   string Value = appSettings[i];
   euFileDictionary.Add(Key, Value);
).ToDictionary<string,string>();

我得到一个编译时错误

无法从用法中推断方法“System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)”的类型参数。尝试明确指定类型参数。

有什么想法吗?

使用 C#3.0

谢谢

【问题讨论】:

appSettings 的类型是什么? 似乎您已经想出办法了,但是...您的第二个代码 sn-p 没有多大意义。这纯粹是学术活动吗? 【参考方案1】:

谢谢我的答案

Enumerable.Range(0, appSettings.Count).ToList().ForEach(i =>
 
   euFileDictionary.Add(appSettings.Keys[i], appSettings[i]);
);

【讨论】:

【参考方案2】:
Enumerable.Range(0, appSettings.Count).Select(i =>
new  
   
   Key = appSettings.Keys[i],
   Value = appSettings[i]
)
.ToDictionary(x => x.Key, x => x.Value);

【讨论】:

【参考方案3】:
Enumerable.Range(0, appSettings.Count)
          .ToDictionary(
              i => appSettings.Keys[i],
              i => appSettings[i]);

【讨论】:

以上是关于使用 Enumerable.Range() 填充字典的问题的主要内容,如果未能解决你的问题,请参考以下文章

Enumerable.Range 的高内存消耗?

为啥 Enumerable.Range 实现 IDisposable?

扩展 Enumerable.Range [重复]

为啥 Enumerable.Range 比直接 yield 循环快?

关于 Enumerable.Range 与传统 for 循环的 foreach 的思考

csharp 对于那些需要在一段时间内创建DropDownList的时候,您可以通过“Enumerable.Range”轻松完成。样本c