加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:14:34 所属栏目:百科 来源:网络整理
导读:Resharper总是要求我将foreach循环更改为 linq,我尝试着.这个难倒我. foreach(var fileEnvironment in fileEnvironmentSection.FileEnvironmentList) { var element = fileEnvironment as FileEnvironmentElement; if(element == null) { //Not the expected
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作为配置部分中的对象返回.这就是演员阵容的原因.

解决方法

您可以使用 OfType运算符:

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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读