这个foreach在中间有一个演员,可以翻译成linq吗?

时间:2012-01-21 22:23:40

标签: c# linq

Resharper总是要求我将foreach循环更改为linq,我尝试着。这个让我难过。

foreach(var fileEnvironment in fileEnvironmentSection.FileEnvironmentList) {
    var element = fileEnvironment as FileEnvironmentElement;
    if(element == null) {
        //Not the expected type, so nothing to do
    } else {
        //Have the expected type, so add it to the dictionary
        result.Add(element.Key, element.Value);
    }
}

fileEnvironment作为对象从配置部分返回。这就是演员阵容的原因。

1 个答案:

答案 0 :(得分:10)

您可以使用OfType运算符:

  

根据指定的类型过滤IEnumerable的元素。

foreach(var element in fileEnvironmentSection.FileEnvironmentList
                                             .OfType<FileEnvironmentElement>())
{
    result.Add(element.Key, element.Value);
}

LINQ不会帮助循环体,因为它正在改变现有字典 - LINQ通常用于创建新数据而不是修改现有数据。

如果你不介意在这里回复一个新词典,你可以这样做:

var newResult = fileEnvironmentSection.FileEnvironmentList
                                      .OfType<FileEnvironmentElement>()
                                      .ToDictionary(element => element.Key,
                                                    element => element.Value);