评估if语句中的条件

fre*_*hie 0 c# if-statement

假设我有这个if语句:

foreach (MyModel m in SomeList)
{
   if (m.pID != SomeValue && (m.xID != 0 && SomeFunction(m.xID) == false)
   {
      return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

我只想SomeFunction(m.xID) == false评估是否m.xID != 0如此,如果m.xID == 0不评估SomeFunction

目前,我将这个if语句分解为2个语句,并且我希望看到如何在保留逻辑的同时将这些语句组合成一个语句.这是原作:

foreach (MyModel m in SomeList)
{
   if (m.xID != 0 && SomeFunction(m.xID) == false)
   {
      return false;
   }

   if (m.pID != SomeValue)
   {
      return false;
   }
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*dou 5

你正在寻找这个|| 运算符(C#参考)

if ((m.xID != 0 && SomeFunction(m.xID) == false) || (m.pID != SomeValue))
{
  return false;
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*ert 5

如果这就是你的循环所做的那么我将倾向于完全删除循环.

此外,false只需使用!运算符,而不是比较某些东西.

if (SomeList.Any(MyModel m=>m.xID != 0 && !SomeFunction(m.xID) || m.pID != SomeValue))
  return false;
Run Code Online (Sandbox Code Playgroud)