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

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    public static void Test(__arglist)
    {
    
    }
    public static void Text2(ref string str)
    {
    	var reftype = __reftype(new TypedReference());
    	var refvalue =  __refvalue(new TypedReference(), string) = "string";
    	var makeref = __makeref(str);
    }

    Ты не поверишь, но это реально C#

    Запостил: dm_fomenok, 15 Июня 2016

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

    • Где говнокод? Этонормальные команды, хоть и недокументированные. См. habrahabr.ru/company/pvs-studio/blog/303340/
      И лучше сначала погуглить, а только потом смеяться.
      Ответить
      • > Где говнокод?
        Ну, к примеру, на что ссылается пустой TypedReference, который запиливают в строках 7-8 и какого типа это нечто? Почему в него можно засунуть строку и не упасть?
        Ответить
        • Может что-то для dynamic?
          Ответить
        • Угадай)

          Спойлер:

          var reftype = __reftype(new TypedReference());

          при трансформации в IL превращается в

          var typeFromHandle = __reftype(default(TypedReference));

          Очевидно, что default(TypedReference) == null, а, соответственно, и typeFromHandle == null
          Ответить
          • А вот что хотел автор сказать восьмой строкой для меня загадка, потому что InvalidCastException.
            Ответить
          • Увы и ах, TypedReference - структура, поэтому default(TypedReference) - не null, а структура с незаполненными полями указателей на тип и значение. Но __reftype() таки вернет null :)
            Ответить
    • можно довольно много интересного узнать просто декомпилируя шарповые программки. там много подобных вспомогательных конструкций языка
      Ответить

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