首页 > 解决方案 > 如何使用 LINQ 过滤不为 null 的属性并获取其值来运行方法?

问题描述

如何创建 LINQ 以DoSomething()仅调用一次以减少这些重复代码?请注意,有一些属性nameValue我不需要做任何事情。DoSomething()仅适用于这 4 个属性。

foreach (var nameValue in nameDetails.NameValue)
{ 
    if (nameValue.FirstName != null)
    {                                                       
        DoSomething(nameValue.FirstName)
    }

    if (nameValue.MaidenName != null)
    {
        DoSomething(nameValue.MaidenName)
    }

    if (nameValue.MiddleName != null)
    {
        DoSomething(nameValue.MiddleName)                           
    }

    if (nameValue.Surname != null)
    {
        DoSomething(nameValue.Surname)  
    }
}

标签: c#

解决方案


将条件移入函数中,您可以编写

foreach (var nameValue in nameDetails.NameValue)
{                                                      
    DoSomethingMaybe(nameValue.FirstName);
    DoSomethingMaybe(nameValue.MaidenName);
    DoSomethingMaybe(nameValue.MiddleName);
    DoSomethingMaybe(nameValue.Surname);      
}

void DoSomethingMaybe(string value)
{
    if (value != null)
    {                                                       
        DoSomething(value)
    }
}

完全可读,没有不必要的开销,没有一次性的对象。也许不是您期望的答案,但 LINQ 并不是魔法,它能让事情变得更好。


推荐阅读