Note that there are some explanatory texts on larger screens.

plurals
  1. PORefactoring an If else tree
    text
    copied!<p>I have an if else tree that is going to grow as I add additional items for it to maintain and I'm looking at the best way to write it for maintainability I'm starting with this code </p> <pre><code>private void ControlSelect() { if (PostingType == PostingTypes.Loads &amp;&amp; !IsMultiPost) { singleLoadControl.Visible = true; singleTruckControl.Visible = false; multiTruckControl.Visible = false; multiLoadControl.Visible = false; } else if (PostingType == PostingTypes.Trucks &amp;&amp; !IsMultiPost) { singleLoadControl.Visible = false; singleTruckControl.Visible = true; multiTruckControl.Visible = false; multiLoadControl.Visible = false; } else if (PostingType == PostingTypes.Loads &amp;&amp; IsMultiPost) { singleLoadControl.Visible = false; singleTruckControl.Visible = false; multiTruckControl.Visible = false; multiLoadControl.Visible = true; } else if (PostingType == PostingTypes.Trucks &amp;&amp; IsMultiPost) { singleLoadControl.Visible = false; singleTruckControl.Visible = false; multiTruckControl.Visible = true; multiLoadControl.Visible = false; } } </code></pre> <p>and thinking of re-factoring it to something like this</p> <pre><code>private void ControlSelect() { List&lt;UserControl&gt; controlList = GetControlList(); string visableControl = singleLoadControl.ID; if (PostingType == PostingTypes.Loads &amp;&amp; !IsMultiPost) { visableControl = singleLoadControl.ID; } else if (PostingType == PostingTypes.Trucks &amp;&amp; !IsMultiPost) { visableControl = singleTruckControl.ID; } else if (PostingType == PostingTypes.Loads &amp;&amp; IsMultiPost) { visableControl = multiLoadControl.ID; } else if (PostingType == PostingTypes.Trucks &amp;&amp; IsMultiPost) { visableControl = multiTruckControl.ID; } foreach (UserControl userControl in controlList) { userControl.Visible = (userControl.ID == visableControl); } } private List&lt;UserControl&gt; GetControlList() { List&lt;UserControl&gt; controlList = new List&lt;UserControl&gt; { singleLoadControl, multiTruckControl, singleTruckControl, multiLoadControl }; return controlList; } </code></pre> <p>I take a performance hit but I can manage all of my controls is a single place</p> <p>my other thought was to make each selected control block it own method, something like this</p> <pre><code>private void SetSingleLoadControlAsSelected() { singleLoadControl.Visible = true; singleTruckControl.Visible = false; multiTruckControl.Visible = false; multiLoadControl.Visible = false; } </code></pre> <p>I don't take a performance hit but I'm maintaining the controls in multiple location</p> <p>I'm leaning for option one just because I like maintainability aspect of it.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload