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
作为对象从配置部分返回。这就是演员阵容的原因。
答案 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);