ondimand ondimand
ondimand ondimand

Reputation: 37

How to avoid more if else in effective way?

I have a function like below but it seems more if else conditions. If there any similar effective way to handle the same. This function with my code properly working.

public bool UpdateAdjustmentRequest()
{
   if (ds1.Tables[0].Rows[0]["AppLev1Req"].ToString().Trim() == "True")
    {
        if (ds1.Tables[0].Rows[0]["AppLev2Req"].ToString().Trim() == "True")
        {
            if (ds1.Tables[0].Rows[0]["AppLev3Req"].ToString().Trim() == "True")
            {
                if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
                {
                    //1234
                    if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
                    {
                        if (UpdateApprovedRequest())
                        {                                       
                              //done 
                        }
                        else
                        {
                            return false;
                        }

                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    //123
                    if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved"))
                    {
                        if (UpdateApprovedRequest())
                        {
                                //done
                        }
                        else
                        {
                            return false;
                        }

                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
            {
                //124
                if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
                {
                    if (UpdateApprovedRequest())
                    {
                         //done
                    }
                    else
                    {
                        return false;
                    }

                }
                else
                {
                    return false;
                }
            }
            else
            {
                //12
                if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved"))
                {
                    if (UpdateApprovedRequest())
                    {
                          //done
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    return true;
                }
            }
        }
        else if (ds1.Tables[0].Rows[0]["AppLev3Req"].ToString().Trim() == "True")
        {
            if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
            {
                //134
                if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
                {
                    if (UpdateApprovedRequest())
                    {
                          //done
                    }
                    else
                    {
                        return false;
                    }

                }
                else
                {
                    return false;
                }
            }
            else
            {
                //13
                if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved"))
                {
                    if (UpdateApprovedRequest())
                    {
                         //done
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                {
                    Master.ReloadParentPage();
                    return false;
                }
            }
        }
        else if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
        {
            //14
            if ((ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
            {
              if(UpdateApprovedRequest())
                {
                     //done
                }
                else
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
        else
        {
            //1
            if (ds1.Tables[0].Rows[0]["Approver1Status"].ToString().Trim() == "Approved")
            {
                if (UpdateApprovedRequest())
                {
                          //done
                }
                else
                {
                  return false;
                }

            }
            else
            {
                return false;
            }
        }

    }
    else if (ds1.Tables[0].Rows[0]["AppLev2Req"].ToString().Trim() == "True")
    {
        if (ds1.Tables[0].Rows[0]["AppLev3Req"].ToString().Trim() == "True")
        {
            if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
            {
                //234
                if ((ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
                {
                    if (UpdateApprovedRequest())
                    {
                         //done
                    }
                    else
                    {
                        return false;
                    }

                }
                else
                {
                    return false;
                }
            }
            else
            {
                //23
                if ((ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved"))
                {
                    if (UpdateApprovedRequest())
                    {
                       //done
                    }
                    else
                    {
                        return false;
                    }

                }
                else
                {
                    return false;
                }
            }
        }
        else if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
        {
            //24
            if ((ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
            {
                if (UpdateApprovedRequest())
                {
                     //done
                }
                else
                {
                    return false;
                }

            }
            else
            {
                return false;
            }
        }
        else
        {
            //2
            if (ds1.Tables[0].Rows[0]["Approver2Status"].ToString().Trim() == "Approved")
            {
                if (UpdateApprovedRequest())
                {
                   //done
                }
                else
                {
                    return false;
                }

            }
            else
            {                            return false;
            }
        }
    }
    else if (ds1.Tables[0].Rows[0]["AppLev3Req"].ToString().Trim() == "True")
    {
        if (ds1.Tables[0].Rows[0]["AppLev4Req"].ToString().Trim() == "True")
        {
            //34
            if ((ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved") && (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved"))
            {
                if (UpdateApprovedRequest())
                {
                       //done
                }
                else
                {
                    return false;
                }

            }
            else
            {
                return false;
            }
        }
        else
        {
            //3
            if (ds1.Tables[0].Rows[0]["Approver3Status"].ToString().Trim() == "Approved")
            {
                if (UpdateApprovedRequest())
                {
                      //done
                }
                else
                {
                    return false;
                }

            }
            else
            {
                return false;
            }
        }
    }
    else
    {
        //4
        if (ds1.Tables[0].Rows[0]["Approver4Status"].ToString().Trim() == "Approved")
        {
            if (UpdateApprovedRequest())
            {
                 //done
            }
            else
            {
                return false;
            }
        }
        else
        {
            return false;
        }
    }
    return true;
}

Upvotes: 0

Views: 70

Answers (1)

SomeBody
SomeBody

Reputation: 8743

I haven't read your whole code because it is quite lengthy. But as far as I can see, you have this pattern in your code:

if(FirstCondition())
{
   if(SecondCondition())
   {
      if(ThirdCondition())
      {
          DoSomething();
          return true;
      }
      else
      {
         return false;
      }
   }
   else
   {
      return false;
   }
}
else
{
   return false;
}

Which is really difficult to read, because the if and else blocks tend to be really far away from each other (at least at the outer ifs). You can easiliy avoid it by negating the conditions:

if(!FirstCondition())
{
   return false;
}
if(!SecondCondition())
{
   return false;
}
if(!ThirdCondition())
{
   return false;
}

DoSomething();
return true;

This code is much clearer: Here, one can see immediately, that three preconditions are checked, and that some action is performed, if they are fulfilled, otherwise the method is left with a negative result.

Upvotes: 1

Related Questions