LinQ of Value in Value

Ole*_*ers 3 c# linq

我有以下词典:

public Dictionary<string,object> Items;
Run Code Online (Sandbox Code Playgroud)

现在我需要获取Dictionary-item 的Value来自特定类型的所有Items .(例如"int")

var intValues = Items.OfType<KeyValuePair<string,int>> 根本行不通.

没有LinQ的代码将是这样的:

var intValues=new Dictionary<string,int>()
foreach (var oldVal in Items) {
  if (oldVal.Value is int) {
    intValues.add(oldVal.Key, oldVal.Value);
  }
}
Run Code Online (Sandbox Code Playgroud)

(更新)我的例子应该显示基本的想法.但是如果可能的话,我会避免创建一个新的Dictionary作为结果.

pok*_*oke 7

foreach在LINQ 中您的直接翻译如下:

var intValues = Items.Where(item => item.Value is int)
                     .ToDictionary(item => item.Key, item => (int)item.Value);
Run Code Online (Sandbox Code Playgroud)

所以基本上,你首先过滤它所在的item.Value位置int,然后使用ToDictionary你在哪里投射这些值来创建一个字典,int以确保生成的字典是一个Dictionary<string, int>.由于我们已经过滤了非整数,因此这种类型转换将始终成功.