【问题标题】:Using IEnumerable<Dictionary<string, object>> ds get the key, value pair [closed]使用 IEnumerable<Dictionary<string, object>> ds 获取键、值对 [关闭]
【发布时间】:2014-12-22 21:36:34
【问题描述】:

我将函数的返回类型设置为IEnumerable&lt;Dictionary&lt;string, object&gt;&gt;,我需要获取键值对。

使用适当的键,我需要更改值。

当返回类型是 Dictionary 时我有一个解决方案,但在 IEnumerable&lt;Dictionary&lt;string, object&gt;&gt; 时没有解决方案

我终于需要修改值之后,找到具体的key了。

【问题讨论】:

  • 多个字典可以有相同的key吗?您要将更改的值存储在哪里?更改返回的字典?
  • 那么...你的返回类型是键值对集合的集合?
  • @Lucas 我只有字典,我需要修改一个值。我正在考虑使用键找到值并在那里修改它。
  • 请查看更新后的答案

标签: c# dictionary ienumerable


【解决方案1】:

以下这些解决方案可能是您想要的,但是您必须根据您的情况确定哪个更合适

给定

var myKey = "someKey";

假设,您的字典列表包含您要查找的键,只有一次

var aDictionary = MyEnumerable.Single(x => x.ContainsKey(myKey));
aDictionary[myKey] = myNewValue;

如果

会抛出 InvalidOperationException
  • 找到多个密钥
  • 没有找到密钥

假设您的字典列表可能包含也可能不包含您要查找的键,只有一次

var aDictionary = MyEnumerable.SingleOrDefault(x => x.ContainsKey(myKey));

if(aDictionary != null)
{
    aDictionary[myKey] = myNewValue;
}

如果

会抛出 InvalidOperationException
  • 找到多个密钥

假设您的密钥可能多次出现

foreach (var aDictionary in MyEnumerable.Where(x => x.ContainsKey(myKey)))
{
    aDictionary[myKey] = myNewValue;
}

更新

您似乎对IEnumerable&lt;Dictionary&lt;string, object&gt;&gt;这个类型感到困惑

IEnumerable 是一个列表(为了这次谈话的重点)

Dictionary 表示键和值的集合。

所以你有一个键和值集合的列表

【讨论】:

  • 在这种情况下什么是 myobect
  • 它的值由 Dictionary 表示
  • @saruman 我可以使用 foreach 从项目中获取值吗,因为我有不止一次出现。
  • 第三个示例循环遍历所有包含您的键的字典,并为您的键值对分配一个新值
【解决方案2】:

您可以使用 foreach 语句遍历 IEnumerable>: (这只是一个帮助说明的例子)

IEnumerable<Dictionary<string, object>> colectionDict;
foreach(var dict in colectionDict) //dict is an object of type Dictionary<string,object>

此外,您可以使用变量类型 Enumerator。

var enum = colectionDict.GetEnumerator();
while(enum.Next){
    var dict = enum.Current; // dict is an object of type Dictionary<string,object>
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 2013-05-15
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多