Си диез / Говнокод #20208 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 dm_fomenok, (Updated )

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

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

        Спойлер:

        var reftype = __reftype(new TypedReference());

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

        var typeFromHandle = __reftype(default(TypedReference));

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

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8