Reputation: 37
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
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 if
s). 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