C# lambda表达式:Where(TSource)函数内部和条件的最佳实践

C# lambda表达式:Where(TSource)函数内部和条件的最佳实践,c#,if-statement,where,C#,If Statement,Where,如果在Where()函数中编写以下内容,那么在lambda表达式中是否有良好的实践 任何不写的理由: lst.Where(obj => obj.Prop1 && obj.Prop2) ??一般而言: 我避免直接比较true和false,更喜欢if(foo)而不是if(foo==true) 当您的代码结构为: if (condition) { return true; } else { return false; } 然后,您可以将其替换为: retur

如果在Where()函数中编写以下内容,那么在lambda表达式中是否有良好的实践


任何不写的理由:

lst.Where(obj => obj.Prop1 && obj.Prop2)
??一般而言:

  • 我避免直接比较true和false,更喜欢
    if(foo)
    而不是
    if(foo==true)
  • 当您的代码结构为:

    if (condition)
    {
        return true;
    }
    else
    {
        return false;
    }
    
    然后,您可以将其替换为:

    return condition;
    
    这在lambda表达式中与在其他任何表达式中一样正确-除了像您这样的lambda表达式,这意味着您可以从语句lambda(围绕主体的大括号)移动到表达式lambda(不带大括号)

第二点也超越了使用条件运算符的true和false。我通常会将其转换为:

if (condition)
{
    return x;
}
else
{
    return y;
}


任何不写的理由:

lst.Where(obj => obj.Prop1 && obj.Prop2)
??一般而言:

  • 我避免直接比较true和false,更喜欢
    if(foo)
    而不是
    if(foo==true)
  • 当您的代码结构为:

    if (condition)
    {
        return true;
    }
    else
    {
        return false;
    }
    
    然后,您可以将其替换为:

    return condition;
    
    这在lambda表达式中与在其他任何表达式中一样正确-除了像您这样的lambda表达式,这意味着您可以从语句lambda(围绕主体的大括号)移动到表达式lambda(不带大括号)

第二点也超越了使用条件运算符的true和false。我通常会将其转换为:

if (condition)
{
    return x;
}
else
{
    return y;
}


谢谢,谢谢你support@Jon:在条件运算符中,为什么我不能这样使用它:isHRUser()?fillAllEmployees():pnlUsers.Visible=false@雷蒙:如果不知道
FilallEmployees()
返回的内容,就很难判断。条件表达式必须是具有值的表达式,而不仅仅是语句。如果
fillAllEmployees()
是一个void方法,这将阻止在这里使用它。(我还建议您开始遵循.NET命名约定。)@Jon;我改变了方法,让它返回一个布尔值,但仍然是一样的,关于命名约定,您可能会注意到,这两个方法声明为private,所以第一个字母很小,这是您的观察结果吗?@Remon:虽然private方法可以使用您喜欢的任何约定,我见过的所有生产代码都对所有方法使用PascalCase。你现在犯了什么错误?您将表达式的结果指定给什么?(同样,这是一个表达式,不能单独用作语句……老实说,这可能是一个条件运算符不合适的情况。)谢谢,感谢您的支持support@Jon:在条件运算符中,为什么我不能这样使用它:isHRUser()?fillAllEmployees():pnlUsers.Visible=false@雷蒙:如果不知道
FilallEmployees()
返回的内容,就很难判断。条件表达式必须是具有值的表达式,而不仅仅是语句。如果
fillAllEmployees()
是一个void方法,这将阻止在这里使用它。(我还建议您开始遵循.NET命名约定。)@Jon;我改变了方法,让它返回一个布尔值,但仍然是一样的,关于命名约定,您可能会注意到,这两个方法声明为private,所以第一个字母很小,这是您的观察结果吗?@Remon:虽然private方法可以使用您喜欢的任何约定,我见过的所有生产代码都对所有方法使用PascalCase。你现在犯了什么错误?您将表达式的结果指定给什么?(同样,它是一个表达式,不能单独用作语句……老实说,这可能是条件运算符不合适的情况。)