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

    +133

    1. 1
    System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));

    Почти LISP

    Запостил: snw, 31 Июля 2014

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

    • Было! Боян!
      Ответить
      • Ага, так красиво WinForms дизайнер пишет...
        Ответить
      • http://govnokod.ru/840
        http://govnokod.ru/1626
        http://govnokod.ru/6984
        http://govnokod.ru/9237
        Действительно, популярный код.
        Мне кажется, был ещё один вариант с ID между 14К и 16К, но я не нашёл.

        Но говнокод тут в том, что FromArgb принимает три аргумента.
        Ответить
        • >>Но говнокод тут в том, что FromArgb принимает три аргумента.

          Ловко, я даже не заметил
          Ответить
        • >Но говнокод тут в том, что FromArgb принимает три аргумента.
          А это ещё не значит, что его там нет:
          public static Color FromArgb(int argb);
          public static Color FromArgb(int alpha, Color baseColor)
          public static Color FromArgb(int alpha, int red, int green, int blue);;
          
          public static Color FromArgb(int red, int green, int blue)
          {
          	return Color.FromArgb(255, red, green, blue);
          }


          А вот и нашёлся первоисточник говна:
          public static Color FromArgb(Int32 alpha, Int32 red, Int32 green, Int32 blue)
          {
          	Color.CheckByte(alpha, "alpha");
          	Color.CheckByte(red, "red");
          	Color.CheckByte(green, "green");
          	Color.CheckByte(blue, "blue");
          	return new Color(Color.MakeArgb((Byte)alpha, (Byte)red, (Byte)green, (Byte)blue), Color.StateARGBValueValid, null, (KnownColor)0);
          
          private static void CheckByte(Int32 value, String name)
          {
          	if (value < 0 || value > 255)
          	{
          		throw new ArgumentException(SR.GetString("InvalidEx2BoundArgument", new Object[]
          		{
          			name,
          			value,
          			0,
          			255
          		}));
          	}
          }
          }
          Ответить
          • > new Object[]
            Какой багор кортеж. Надо будет запомнить.
            Ответить
            • В IL'е нет комманды params. Это сахарок.
              String.Format(String format, params Object[] args);


              Мне быстрее ILSpy открыть, чем в исходниках фреймворка ковыряться.
              Ответить
              • >В IL'е нет комманды params. Это сахарок.
                params - это vararg?
                Ответить
                • Да.
                  http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf [Стр.33]
                  The vararg constraint can be included to indicate that all arguments past this point are
                  optional. When it appears, the calling convention shall be one that supports variable argument lists.
                  Ответить
              • По-моему даже в Java так же сделано.
                Ответить
              • Прискорбно, что object[]
                Ответить
          • Это и есть знаменитая бойлерплеть быдлоынтерпрайзных языков?
            Ответить
            • Цвета любят когда их кастуют.
              То голубые, то розовые...
              Ответить
    • >>System.Drawing.Color

      Юзинги не юзаю!
      Ответить
      • Ну, да, было-бы странно на структуру юзинг делать.
        Ответить

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