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

    +128.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
    public static T Parse<T>(string txt)
            {
                if (string.IsNullOrEmpty(txt))
                    return default(T);
    
                txt = txt.Trim();
    
                Type[] typeArray = new Type[] {
                    typeof(string),
                    typeof(T).MakeByRefType()};
    
                MethodInfo mi = typeof(T).GetMethod("TryParse", typeArray);
    
                T value = default(T);
    
                if (mi != null)
                {
                    object[] prms = new object[]{
                    txt,
                    value};
    
                    if ((bool)mi.Invoke(null, prms) && prms[1] != null)
                        value = (T)prms[1];
                }
    
                return value;
            }

    Не скажу что это такой уж говнокод, но что то говнистое в нем есть =)

    Запостил: sven47, 26 Ноября 2009

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

    • студентческий проект?
      Ответить
    • Давайте сначала будем решать, что говнокодистого в коде.
      Потом уж его постить и писать в описании.
      Ответить
    • > студентческий проект?
      Реальный АСПшный проект который принял мой знакомый после прошлого прогера.

      >Давайте сначала будем решать, что говнокодистого в коде.
      думаю что нужно стараться избегать использования рефлексии если это возможно, автор же наоборот пихает ее куда только можно, взять даже тот же сингл тот в его авторстве (#2182).
      Ответить
    • Думаю, зависит от требований к времени выполнения кода.
      Ответить
    • Просто кто-то хотел сделать C# чуть более динамическим языком, чем он есть на самом деле.
      Ответить
    • Если это метод Parse, то намного проще и быстрее сделать так (T)Convert.ChangeType(txt, typeof(T)). Первый аргумент вообще типа object может быть.

      P.S. Зачем писать самому, когда уже все написано до нас. :)
      Ответить

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