LinQ ofType in Value



我有以下字典:

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.Valueint的位置,然后使用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);

最新更新