Как можно укоротить метод? с#

private void button1_Click(object sender, EventArgs e)
{
    double x = double.Parse(textBox1.Text);
    int fst = comboBox1.SelectedIndex;
    int scn = comboBox2.SelectedIndex;

    switch (fst)
    {
        case 0:
            switch (scn)
            {
                case 0:
                    label1.Text = x.ToString();
                    break;
                case 1:
                    label1.Text = (x / 1000).ToString();
                    break;
                case 2:
                    label1.Text = (x / 1000000).ToString();
                    break;
                case 3:
                    label1.Text = (x * 1000).ToString();
                    break;
                case 4:
                    label1.Text = (x * 0.00220462).ToString();
                    break;
            }
            break;
        case 1:
            switch (scn)
            {
                case 0:
                    label1.Text = (x * 1000) .ToString();
                    break;
                case 1:
                    label1.Text = x.ToString();
                    break;
                case 2:
                    label1.Text = (x / 1000).ToString();
                    break;
                case 3:
                    label1.Text = (x * 1000000).ToString();
                    break;
                case 4:
                    label1.Text = (x * 2.20462).ToString();
                    break;
            }
            break;
        case 2:
            switch (scn)
            {
                case 0:
                    label1.Text = (x * 1000000).ToString();
                    break;
                case 1:
                    label1.Text = (x * 1000).ToString();
                    break;
                case 2:
                    label1.Text = x.ToString();
                    break;
                case 3:
                    label1.Text = (x * 1000000000).ToString();
                    break;
                case 4:
                    label1.Text = (x * 2204.62).ToString();
                    break;
            }
            break;
        case 3:
            switch (scn)
            {
                case 0:
                    label1.Text = (x / 1000).ToString();
                    break;
                case 1:
                    label1.Text = (x / 1000000).ToString();
                    break;
                case 2:
                    label1.Text = (x / 1000000000).ToString();
                    break;
                case 3:
                    label1.Text = x.ToString();
                    break;
                case 4:
                    label1.Text = (x * 0.00000220462).ToString();
                    break;
            }
            break;
        case 4:
            switch (scn)
            {
                case 0:
                    label1.Text = (x * 453.59).ToString();
                    break;
                case 1:
                    label1.Text = (x * 0.45359).ToString();
                    break;
                case 2:
                    label1.Text = (x * 0.00045359).ToString();
                    break;
                case 3:
                    label1.Text = (x * 453590).ToString();
                    break;
                case 4:
                    label1.Text = x.ToString();
                    break;
            }
            break;
    }
        
}

Ответы (1 шт):

Автор решения: CrazyElf

Наверное, сейчас можно ещё проще списки инициализировать, я точно не помню, но суть примерно такая:

var data = new List<List<double>>
{
    new List<double>{ 1, 1.0/100, 1.0/1000000, ... },
    new List<double>{ 1000, 1, 1.0/1000, ... },
    ...
};
label1.Text = (x * data[fst][scn]).ToString();

Только инициализация списков и одна строчка кода, никакой лишней копипасты. Если очень хочется, можно вообще данные в json поместить и оттуда забирать, тогда ещё компактнее наверное будет.

→ Ссылка