Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, Пельмешко, Вы писали:
ВВ>Я не слишком рано?
Эх... Про "реинкарнацию 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 ...