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
作为配置部分的对象返回。这就是 Actor 阵容的原因。
最佳答案
您可以使用 OfType
运算符(operator):
Filters the elements of an IEnumerable based on a specified type.
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);
关于c# - 这个foreach中间有个cast,能翻译成linq吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957255/