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

    +123

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    private bool IsInt(object ValueToCheck)
    {
    	int Dummy = new int();
    	string InputValue = Convert.ToString(ValueToCheck);
    
    	//If user enters 45.00 This should not be allowed
    	//User must enter numbers without .00
    	if(InputValue.Contains("."))
    		return false;
    	bool Int = int.TryParse(InputValue, System.Globalization.NumberStyles.Any, null, out Dummy);
    	return Int;
    }

    Уже другой индусский автор наговнокодил. Орфография сохранена. Причем он сам себе в ногу выстрелил используя NumberStyles.Any...

    Вот как надо:

    private static bool IsInt(string valueToCheck) 
    {
    int dummy;
    return int.TryParse(valueToCheck, System.Globalization.NumberStyles.None, null, out dummy);
    }

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

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

    • try
      {
      Convert.ToInt32(valueToCheck);
      return true;
      }catch
      {
      return false;
      }
      Ответить
      • Можно и так. Правда зачем лишние исключения?
        Ответить
        • Просто Lennis тоже "индусский автор".
          Ответить
        • что бы подчеркнуть что мы пишем на доднете
          Ответить
      • кстати, небольшой холивар.
        почему
        catch
        {
        return false;
        }

        а не
        catch
        {
        }
        return false;
        Ответить
        • потому что идеологически плохо проглатывать исключения.
          Ответить
          • ну в данном случае у нас "искусственная" ситуация, мы адекватно реагируем на исключение. Поэтому тут можем и проглотить. А вообще, правда, нужно, как минимум, послать его в логгер
            Ответить
            • Так о чем холивар то? :)
              Ответить
              • реагировать сразу в исключительной ситуации или после (понятно, что в "после" придем только если проглатывалось исключение).
                Лично мне симпатичен второй вариант - но, может быть, я что-то упускаю?
                Ответить
                • Так это, вы же сами пришли к выводу, что второй вариант ущербен в том виде каком он написан.
                  Вот если переписать на
                  catch (Exception e) { logger.LogException(e); }

                  тогда ставить return false; в catch или после одинаково на мой взгляд.
                  Ответить
        • Потому, что пустой блок catch заставляет нервничать. Семантически же оба варианты тождественны.
          Ответить
          • меня заставляет нервничать catch. хорошо, что в данном случае мимо него не проскочим, но в общем случае есть вероятность выполнения кода после try {}catch{}. Поэтому return после этого блока наглядно демонстрирует свою безусловность. Наверное, еще лучше бы return вставить в finally
            Ответить
            • Ага, вставить в finally -- и можно сразу на говнокод вывешивать.

              Кошернее всего было бы return false в catch (и ловить только исключения преобразования), а return true -- после try...catch.
              Ответить

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