I realse that this is an old question, but I noticed a pattern that has not been mentioned; mainly, setting a variable to later determine the method/s you would like to call (outside of the if...else...).
This is just as another angle to look at to make the code easier to work with. It also allows for when you may want to add another method to be called or change the appropriate method that needs to be called in certain situations.
Rather than having to replace all mentions of the method (and maybe missing some scenarios), they are all listed at the end of the if...else... block and are simpler to read and alter. I tend to use this when for example, several methods may be called, but within the nested if...else... a method may be called in several matches.
If you set a variable that defines the state, you could have many deeply nested options, and update state when something is to be (or not to be) performed.
This could be used as in the example asked in the question where we are checking if 'DoSomething' has occurred, and if not, perform the default action. Or you could have state for each method you may want to call, set when applicable, then call the applicable method outside of the if...else...
At the end of the nested if...else... statements, you check state and act accordingly. This means you only need a single mention of a method instead of all the locations that it should be applied.
bool ActionDone = false;
if (Method_1(object_A)) // Test 1
{
result_A = Method_2(object_A); // Result 1
if (Method_3(result_A)) // Test 2
{
Method_4(result_A); // Action 1
ActionDone = true;
}
}
if (!ActionDone)
{
Method_5(); // Default Action
}
bool ActionDone = false;
if (Method_1(object_A)) // Test 1
{
result_A = Method_2(object_A); // Result 1
if (Method_3(result_A)) // Test 2
{
Method_4(result_A); // Action 1
ActionDone = true;
}
}
if (!ActionDone)
{
Method_5(); // Default Action
}