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

    +134

    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
    public static class GlobalFunc
    {
    	// bla-bla-bla ...
     
    	public static bool isDouble(string input)
    	{
    		Double dec;
    		return Double.TryParse(input, out dec);
    	}
    
    	public static bool isUShort(string input)
    	{
    		ushort dec;
    		return ushort.TryParse(input, out dec);
    	}
    
    	public static bool isShort(string input)
    	{
    		short dec;
    		return short.TryParse(input, out dec);
    	}
    
    	public static bool IsDate(string input)
    	{
    		DateTime date;
    		return DateTime.TryParse(input, out date);
    	}
    }

    face palm

    Запостил: Smekalisty, 26 Августа 2014

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

    • Вероятно стоило только Nullable<T> отдавать, а не Boolean, если код не наследие .NET 2.0.

      Ну и пнуть Enum.Parse на всякий случай:
      public static TEnum? ToEnum<TEnum>(String s) where TEnum : struct
      {
      	TEnum dummy;
      	return Enum.TryParse<TEnum>(s, out dummy) && Enum.IsDefined(typeof(TEnum), dummy) ? dummy : (TEnum?)null;
      }


      А дабы не дропнуть производительность на рефлексии, засунуть все енумы в Hashtable для текущего домена:
      public abstract class Enum { private static Hashtable fieldInfoHash = Hashtable.Synchronized(new Hashtable()); }
      Ответить
      • Дык не проканает с вельютайпами. Только с енумами.
        Ответить
        • От первоисточника не сильно отличается:
          http://referencesource.microsoft.com/#mscorlib/system/enum.cs#372

          Поэтому и приходится ещё и Enum.IsDefined использовать, чтобы вот на такое говно не нарваться:
          enum TestEnum { Undefined=0, A1=1, A2=2, };
          static void Main(String[] args) {
              TestEnum dummy=Enum.TryParse<TestEnum>("3",out dummy)?dummy:TestEnum.Undefined;
              System.Diagnistics.Debug.Assert(dummy==TestEnum.Undefined);
          }


          Либо использовать более шустрый вариант, но с затруднениями с дальнейшим развитием:
          TestEnum dummy=Enum.TryParse<TestEnum>("3",out dummy)?dummy:TestEnum.Undefined;
          if(dummy<TestEnum.Undefined || dummy>TestEnum.A2)
              dummy=TestEnum.Undefined;
          Ответить
          • я не совсем понял об чем мы. я о вельютайпах, а ты об енумах...
            Ответить
            • А чем ещё предлагаешь ограничивать енумы передаваемые в генерик?
              Ответить
              • я не понял с чего ты вообще к енумам перешел

                )
                Ответить
                • А-а, понял.
                  В таком случае, лучше заранее построить словарик с MemberInfo по каждому методу Parse, дабы каждый раз не искать его через рефлексию.

                  Да и Parse выбросит исключение, а не успех операции, как это происходит у ТС.

                  Тут ещё пришла идейка унификации такой фигни:
                  String arr="1,2,3,4,5,Печенька,6,7,8,,9";


                  Т.е. стандартный подход выглядит так (Специально Value и explicit cast в лямбде сделал):
                  class NullableParse {
                  static Int32? ToInt32(String s)
                  {
                      Int32 result;
                      return Int32.TryParse(s,out result)?result:(Int32?)null;
                  }
                  }
                  Int32[] result = arr.Split(new Char[] {',',},StringSplitOptions.RemoveEmptyEntries).Select(p=>NullableParse.ToInt32(p)).Where(p=>p!=null).Select(p=>(Int32)p).ToArray();


                  Тут есть 2 проблемы:
                  1) String.Split возвращает сразу Array (Код внутри особыми изысками не отличается)
                  2) Код сложно загнать под генерики. Т.к. либо использование рефлексии, либо городить отдельный статик метод с "if(Type) {}".

                  ... Хотя, на вскидку, вроде всё более-менее сходится...
                  Надо будет завтра попробовать на производительность потестировать...
                  Ответить
                • vanished
                  Ответить
      • https://ideone.com/0GzVfV
        Ответить
        • Для таких вещей есть IConvertible и ChangeType:
          http://govnokod.ru/7004#comment176509
          Ответить
          • да я не так давно сам отписывался про ChangeType. Можно и рефлексией. главное - не брутфорсом)
            Ответить
      • vanished
        Ответить
      • wh0cd18863 <a href=http://cheapviagra2017.com/>Viagra Without Prescription</a>
        Ответить

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