HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpMinor

Go Back to Previous Item

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
itembackprevious

Problem

I have a Back function, and it is growing. I also think this is terrible, but I don't seem to get how it can be improved:

`public void GoBack()
{
NavButtonUsed = true;

Forward.Insert(0, Back[0]);
Back.RemoveAt(0);

if (Back[0].Title.StartsWith(" ") && CurrentItem.Menu != Back[0].Menu)
{
switch (Back[0].Menu)
{
case Menus.WSOneNote:
CurrentItem = ItemList[0];
break;

case Menus.WSMainMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("MainMenu"), typeof(WindowsData.MainMenu), Menus.WSMainMenu))];
break;

case Menus.WSTextMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TextMenu"), typeof(WindowsData.TextMenu), Menus.WSTextMenu))];
break;

case Menus.WSTextBlockMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TextBlockMenu"), typeof(WindowsData.TextBlockMenu), Menus.WSTextBlockMenu))];
break;

case Menus.WSTableMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TableMenu"), typeof(WindowsData.TableMenu), Menus.WSTableMenu))];
break;

case Menus.WSTableCellsMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("TableCellsMenu"), typeof(WindowsData.TableCellsMenu), Menus.WSTableCellsMenu))];
break;

case Menus.WSDrawMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString("DrawMenu"), typeof(WindowsData.DrawMenu), Menus.WSDrawMenu))];
break;

case Menus.WSDrawnItemsMenu:
CurrentItem = ItemList[ItemList.IndexOf(MenuItem.CreateMenuItem(resourceFile.GetString(

Solution

Your GoBack() method could be simplified in its current pattern to

public void GoBack()
{
    NavButtonUsed = true;

    Forward.Insert(0, Back[0]);
    Back.RemoveAt(0);

    CurrentItem = ItemList[ItemList.IndexOf(Back[0])];

    NavButtonUsed = false;
}


The whole switch..case is senseless, because the only thing it is doing is triggering the OnPropertyChanged() event twice.

Inside the switch..case you are assigning a MenuItem to the CurrentItem property (triggering an OnPropertyChanged() event) and you are breaking out of the switch.

Then you are assigning ItemList[ItemList.IndexOf(Back[0])] to the CurrentItem property (triggering an OnPropertyChanged() event), so you are just overwriting the property.

So, if this method works like intended, the switch..case can be removed.

Code Snippets

public void GoBack()
{
    NavButtonUsed = true;

    Forward.Insert(0, Back[0]);
    Back.RemoveAt(0);

    CurrentItem = ItemList[ItemList.IndexOf(Back[0])];

    NavButtonUsed = false;
}

Context

StackExchange Code Review Q#78593, answer score: 6

Revisions (0)

No revisions yet.