Re[2]: [как бы этюд] Забраться в if...
От: Пельмешко Россия blog
Дата: 20.07.09 19:15
Оценка: 4 (1)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, Пельмешко, Вы писали:


ВВ>Я не слишком рано?


Эх... Про "реинкарнацию union'а" и интеропщиков я и не подумал...

Я сделал в unsafe:
byte b = 123;
bool xbool = * (bool*) &b;

storage.GetData(pass, xbool);

Можно поизвратнее, с помощью LCG:
var method = new DynamicMethod(string.Empty, typeof(bool), Type.EmptyTypes);

ILGenerator il = method.GetILGenerator();
il.Emit(OpCodes.Ldc_I4_2);
il.Emit(OpCodes.Ret);

bool xbool = (bool) method.Invoke(null, null);

storage.GetData(pass, xbool);


Если кто не понял, то смысл в том, что boolean на стеке MSIL представляется целым числом, при этом компилятор изо всех сил старается ограничить его значениями 1 и 0, но это не всегда возможно, что может иногда породить необычное поведение типа true != true ...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.