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

    +115

    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
    char[] splitter = { ',' };
    string types = hashtable[FlagsEnumValue].ToString();
    string[] typesStringArray = types.Split(splitter, StringSplitOptions.RemoveEmptyEntries);
    ArrayList typesArray = new ArrayList();
    
    foreach (string str in typesStringArray)
    {
       foreach (string type in Enum.GetNames(typeof(FlagsEnum)))
       {
          if (type == str.Trim())
          {
             typesArray.Add((FlagsEnum)Enum.Parse(typeof(FlagsEnum), str, true));
             break;
          }
       }
    }
    
    
    foreach (FlagsEnum type in typesArray)
    {
       if ((someObject.field & type) > 0)
       {
          typeFound = true;
       }
       else
       {
          typeFound = false;
          break;
       }
    }

    Автор хотел чтобы его любили. Точнее он хотел сконвертировать строковое представление битового енама в инам и сравнить по маске с проперти обьекта. Если бы автор прочел документацию то написал бы так:
    string types = hashtable[FlagsEnumValue].ToString();
    if (types != "")
    {
    FlagsEnum enum = (FlagsEnum)Enum.Parse(typeof(FlagsEnum), types, ignoreCase: true);
    if ((enum & someObject.field) == enum)
    typeFound = true;
    }

    Запостил: piocsic, 01 Марта 2011

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

    • Enum.TryParse() же!
      Ответить
      • Так оно тоже самое, только исключение не бросает.
        Ответить
        • да
          а ещё быстрее и type-safety
          Ответить
          • Когда на .NET 4.0 перейдем, я обязательно перепишу под TryParse :)
            Ответить
            • ага! я для таких случаяев пишу одинаковый коммент тип //TODO: .NET 4.0
              а ещё можно через #define
              Ответить

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