Tell me how to write such code as compactly as possible:

public void UpdateSelectedInfo() { string text1 = "..."; string text2 = "..."; //.. string text8 = "..."; if (mainWindow.IndexForSelectedInfo == 0 || mainWindow.IndexForSelectedInfo == 15 || mainWindow.IndexForSelectedInfo == 16 || mainWindow.IndexForSelectedInfo == 31) mainWindow.textBox2.Text = text1; else if (mainWindow.IndexForSelectedInfo == 1 || mainWindow.IndexForSelectedInfo == 14 || mainWindow.IndexForSelectedInfo == 17 || mainWindow.IndexForSelectedInfo == 30) mainWindow.textBox2.Text = text2; else if (mainWindow.IndexForSelectedInfo == 2 || mainWindow.IndexForSelectedInfo == 13 || mainWindow.IndexForSelectedInfo == 18 || mainWindow.IndexForSelectedInfo == 29) mainWindow.textBox2.Text = text3; else if (mainWindow.IndexForSelectedInfo == 3 || mainWindow.IndexForSelectedInfo == 12 || mainWindow.IndexForSelectedInfo == 19 || mainWindow.IndexForSelectedInfo == 28) mainWindow.textBox2.Text = text4; else if (mainWindow.IndexForSelectedInfo == 4 || mainWindow.IndexForSelectedInfo == 11 || mainWindow.IndexForSelectedInfo == 20 || mainWindow.IndexForSelectedInfo == 27) mainWindow.textBox2.Text = text5; else if (mainWindow.IndexForSelectedInfo == 5 || mainWindow.IndexForSelectedInfo == 10 || mainWindow.IndexForSelectedInfo == 21 || mainWindow.IndexForSelectedInfo == 26) mainWindow.textBox2.Text = text6; else if (mainWindow.IndexForSelectedInfo == 6 || mainWindow.IndexForSelectedInfo == 9 || mainWindow.IndexForSelectedInfo == 22 || mainWindow.IndexForSelectedInfo == 25) mainWindow.textBox2.Text = text7; else if (mainWindow.IndexForSelectedInfo == 7 || mainWindow.IndexForSelectedInfo == 8 || mainWindow.IndexForSelectedInfo == 23 || mainWindow.IndexForSelectedInfo == 24) mainWindow.textBox2.Text = text8; } 

Figures 0..31 are dental indexes. If you click on a particular tooth, its text description is displayed. That is, for four identical teeth there will be one description, for four others - another, etc.

  • You, apparently, wanted to use switch - BOPOH
  • 3
    You should not want this at all. Instead of an index, you should have a data structure describing a tooth that has its position (top / bottom, right / left), position from the center, name and everything you need. If the index is obtained from the list, use not a loop on indices, but foreach, and not SelectedIndex, but SelectedItem. Indices - evil and stone age. - VladD

2 answers 2

I would do this:

 string[] texts = new string[] {"...", "...", /* ... */ "..."}; int[] indexMap = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0 }; mainWindow.textBox2.Text = texts[indexMap[mainWindow.IndexForSelectedInfo]]; 
     public static int SelectionIndexToTeethIndex(int selectionIndex) { if (selectionIndex / 8 % 2 == 1) { selectionIndex = 31 - selectionIndex; } return selectionIndex % 8; } var texts = new string[] { "Text1", "Text2", ... }; mainWindow.textBox2.Text = texts[SelectionIndexToTeethIndex(mainWindow.IndexForSelectedInfo)];