1. C# / Говнокод #9444

    +962

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    for (int i = 0; i < 4; i++)
    {
        if (!UseParam[i])
        {
            switch (i)
            {
                case 0:
                    if (AutoCalc || XtraMessageBox.Show("Неверные показания амперметра " + PS1_DeviceName_A.Text + " " + PS1.Text + "\nИслючить из расчета?", "Проверка показаний", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                    {
                        if (CorrectKm[i] == 0 || CorrectKm[i] == L)
                            I1 = (CorrectValue[i] ?? 0) * 1000;
                        else
                            I1 = GetCorrectElectricValue(CorrectKm[1] ?? 0, "I0_A", row["N"], row["M"]) * 1000;
                        I0_A.ErrorText = PS1_A.ErrorText = "Показание " + PS1_DeviceName_A.Text + " исключено из расчета";
                    }
                    break;
                case 1:
                    if (AutoCalc || XtraMessageBox.Show("Неверные показания вольтметра" + PS1_DeviceName_B.Text + " " + PS1.Text + "\nИслючить из расчета?", "Проверка показаний", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                    {
                        if (CorrectKm[i] == 0 || CorrectKm[i] == L)
                            U1 = (CorrectValue[i] ?? 0) * 1000;
                        else
                            U1 = GetCorrectElectricValue(CorrectKm[0] ?? 0, "U0_A", row["N"], row["M"]) * 1000;
                        U0_A.ErrorText = PS1_B.ErrorText = "Показание " + PS1_DeviceName_B.Text + " исключено из расчета";
                    }
                    break;
                case 2:
                    if (AutoCalc || XtraMessageBox.Show("Неверные показания амперметра" + PS2_DeviceName_A.Text + " " + PS2.Text + "\nИслючить из расчета?", "Проверка показаний", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                    {
                        if (CorrectKm[i] == 0 || CorrectKm[i] == L)
                            I2 = (CorrectValue[i] ?? 0) * 1000;
                        else
                            I2 = GetCorrectElectricValue(CorrectKm[3] ?? 0, "I0_B", row["N"], row["M"]) * 1000;
                        I0_B.ErrorText = PS2_A.ErrorText = "Показание " + PS2_DeviceName_A.Text + " исключено из расчета";
                    }
                    break;
                case 3:
                    if (AutoCalc || XtraMessageBox.Show("Неверные показания вольтметра" + PS2_DeviceName_B.Text + " " + PS2.Text + "\nИслючить из расчета?", "Проверка показаний", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                    {
                        if (CorrectKm[i] == 0 || CorrectKm[i] == L)
                            U2 = (CorrectValue[i] ?? 0) * 1000;
                        else
                            U2 = GetCorrectElectricValue(CorrectKm[2] ?? 0, "U0_B", row["N"], row["M"]) * 1000;
                        U0_B.ErrorText = PS2_B.ErrorText = "Показание " + PS2_DeviceName_B.Text + " исключено из расчета";
                    }
                    break;
            }
        }
    }

    Красота

    Запостил: invi, 16 Февраля 2012

    Комментарии (13) RSS

    • Ахаха, люблю такие говнокды, главный принцип которых, сказано, но не сделано))
      Ответить
    • bool? x = true as bool? ??false;

      Жаль, что с тремя вопросительными знаками подряд не компилируется...
      Ответить
      • в коде везде int?.
        Ответить
        • Если код старый, то весьма вероятно что просто ArrayListы.
          Ответить
          • CorrectValue[i] ?? 0
            неа, внутри явно лежит int? либо какой-то ещё числовой тип явно приводимый к int
            Ответить
            • Почему бы это?

              object t = null;
              object t1 = t ?? 0;

              Прекрасно компилируется и работает.
              Boxing/unboxing еще никто не отменял.
              На 90% уверен, что CorrectValue = ArrayList.
              5% на то, что object[].
              Ответить
              • почему не int[]?

                сравнивать с 0 (или неким числом) L имеет смысл только int[i],
                либо это таки б-гомерзский ArrayList, внутри которого всё так же int
                Ответить
                • Ну не знаю :) Просто интуиция.
                  Как-бы по общему уровню кода не сказал бы, что автор дорос до использования Nullable.
                  К этому коду ближе по духу использование object.
                  Хотя в таком случае использование результата ?? в качестве аргумента при вызове метода говорило бы о том, что аргументы тоже object, что вообще печально.
                  Не знаю :)
                  В общем топикстартер поучавствовал в загадывании загадки не меньше, чем автор кода. Хоть бы пару слов о типах используемых переменных и аргументов.
                  Ответить
        • Я к тому, что тут и язык и автор на пару постарались. Если не писать пробелы вокруг ??, то можно обламаться, когда это будет что-то типа:
          Foo? bar = baz as Foo??something:somethingEsle;
          Ответить
          • неа, не прокатит

            х as Т? возвращает либо Т либо null

            а оператор ?: ожидает слева bool.
            Ответить
            • Тогда смотри пример выше :)
              Ответить
            • public static implicit operator bool (Foo foo)
              {
              	return foo != null;
              }

              Или так :) Было бы желание.
              Ответить

    Добавить комментарий