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

    +135.8

    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
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    public static string ResultToString(long Result)
            {
                switch (Result)
                {
                    case TRANS2QUIK_SUCCESS:                                //0
                        return "TRANS2QUIK_SUCCESS";
                        break;
                    case TRANS2QUIK_FAILED:                                 //1
                        return "TRANS2QUIK_FAILED";
                        break;
                    case TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND:                //2
                        return "TRANS2QUIK_QUIK_TERMINAL_NOT_FOUND";
                        break;
                    case TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED:              //3
                        return "TRANS2QUIK_DLL_VERSION_NOT_SUPPORTED";
                        break;
                    case TRANS2QUIK_ALREADY_CONNECTED_TO_QUIK:              //4
                        return "TRANS2QUIK_ALREADY_CONNECTED_TO_QUIK";
                        break;
                    case TRANS2QUIK_WRONG_SYNTAX:                           //5
                        return "TRANS2QUIK_WRONG_SYNTAX";
                        break;
                    case TRANS2QUIK_QUIK_NOT_CONNECTED:                     //6
                        return "TRANS2QUIK_QUIK_NOT_CONNECTED";
                        break;
                    case TRANS2QUIK_DLL_NOT_CONNECTED:                      //7
                        return "TRANS2QUIK_DLL_NOT_CONNECTED";
                        break;
                    case TRANS2QUIK_QUIK_CONNECTED:                         //8
                        return "TRANS2QUIK_QUIK_CONNECTED";
                        break;
                    case TRANS2QUIK_QUIK_DISCONNECTED:                      //9
                        return "TRANS2QUIK_QUIK_DISCONNECTED";
                        break;
                    case TRANS2QUIK_DLL_CONNECTED:                          //10
                        return "TRANS2QUIK_DLL_CONNECTED";
                        break;
                    case TRANS2QUIK_DLL_DISCONNECTED:                       //11
                        return "TRANS2QUIK_DLL_DISCONNECTED";
                        break;
                    case TRANS2QUIK_MEMORY_ALLOCATION_ERROR:                //12
                        return "TRANS2QUIK_MEMORY_ALLOCATION_ERROR";
                        break;
                    case TRANS2QUIK_WRONG_CONNECTION_HANDLE:                //13
                        return "TRANS2QUIK_WRONG_CONNECTION_HANDLE";
                        break;
                    case TRANS2QUIK_WRONG_INPUT_PARAMS:                     //14
                        return "TRANS2QUIK_WRONG_INPUT_PARAMS";
                        break;
                    default:
                        return "UNKNOWN_VALUE";
                        break;
                }
            }
            public static string ByteToString(byte[] Str)
            { 
                string s="";
                for (int i = 0; i < Str.Length; i++)
                {
                    s = s + Str[i].ToString();
                }
                return s;
            }

    Лежит в качестве примера на одном из сайтов.
    Ну автору всё равно спасибо, пример и правда полезный (да и код прикольный :)).

    Запостил: greeny, 23 Октября 2009

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

    • Свич порадовал однако
      Ответить
      • Я сейчас разбираюсь с этим горе-кодом. Там оказывается (во второй процедуре) массив байт должен быть преобразован в строку. Так вот, любая строка в итоге получается типа такой: "567827638723658327568347658347658376487 23682346". Потому что Byte.ToString() рулит. Пипец. Автор бедняга наверное долго мучался, но так и не родил.
        Ответить
        • Я еще долго думал, что значат эти цифры (когда запускал приложение).
          Ответить
      • А чем ещё свитч можно заменить, кроме массивом констант или if'ами?
        Ответить
        • Если у сущности появились имя и значение, то это как минимум структура. В будущем, возможно, дорастет до объекта.
          Практически все вызовы switch в языках программирования высокого уровня от лени или неумения. Заменять их следует вызовом метода объекта или извлечением поля из структуры.
          Ответить
          • А можно с примером, что вы имели ввиду?
            Ответить
            • Гость #comment9126 прав, в C# для этого лучше всего подходит enum. Я обычно пишу в C++, поэтому имел ввиду примерно следующее:
              struct TNamedConstsnt
              {
              const long Value;
              const char* const Name;
              TNamedConstsnt(const long value, const char* const name) :
              Value(value), Name(name)
              {}
              };
              Затем создаем константы и запихиваем их в контейнер, например так
              new TNamedConstsnt(5, "TRANS2QUIK_DLL_VERSION_NOT_SUPPORTE D");
              Функция, описанная автором, вырождается в проход по контейнеру в поисках соответствия.
              Это если изобретать велосипед. А вообще есть реализованные контейнеры для пар ключ-значение, которые ко всему прочему еще проверяют уникальность ключа.
              Ответить
          • "Практически все вызовы switch в языках программирования высокого уровня от лени или неумения"
            Да ну?
            К твоему сведению switch в .Net, например, при компиляции сразу преобразуется в методы и в очень многих случаях предоставляет возможность писать простой, очевидный и очень быстрый код.
            Ответить
        • К этому свичу прилагается таблица констант. Всю эту таблицу можно было забить в enum, а потом использовать метод ToString().
          Там вообще-то еще операторы break не выполняются. :)
          Ответить
        • Мапом, если не классом. а массив (или не массив) пар вынести в отдельный файл.
          Ответить
    • Use Enum
      Ответить
    • а если это сасунуть в dll то можно не испоьзовать switch
      там по строке вызываеться функции, можно конечно отправлять функцию в своюже программу, но это медлее будет
      external <адрес dll(exe )> name <насвание процедуры>
      Ответить

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