我有以下字典:
public Dictionary<string,object> Items;
现在,我需要获取所有项目,而字典 - 项目的 value 来自特定类型。(例如" 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);
}
}
(更新(我的示例应显示基本想法。但是,如果可能的话,我将避免创建新的字典。
foreach
的直接翻译将是Linq中的以下内容:
var intValues = Items.Where(item => item.Value is int)
.ToDictionary(item => item.Key, item => (int)item.Value);
基本上,您首先要过滤item.Value
是int
的位置,然后使用ToDictionary
从其词典中创建一个字典,在该字典中,您将这些值投放到int
中以确保所得的字典是Dictionary<string, int>
。由于我们已经过滤了非智能者,因此这种类型的铸件将始终成功。
您可以在Value
属性上使用is
操作员:
var intValues = Items.Where(x => x.Value is int);
如果您最终想要一个实际的Dictionary<string,int>
,只需添加:
.ToDictionary(v=> v.Key, v=> (int)v.Value)
尝试一下:
var intValue = Items
.Where(x => x.Value is int) // filter per Value is int
.ToDictionary(x => x.Key, x => (int)x.Value); // create a new dictionary converting Value to int
你可以做
var result = Items.Where(x => x.Value is int)
.ToDictionary(x => x.Key, x => x.Value);