我想檢查一個布爾字段,如果它是假的。但我無法讓它工作。c#發出檢查布爾字段並打破標籤
所以我想推一個布爾字段到堆棧並調用Brtrue_S,這將翻轉控制是一個值爲真或不爲空。但它失敗了。 這段代碼工作正常,如果我只推一個int,比如一個0,到堆棧,爲什麼不是一個布爾值?
我已經嘗試了一些unbox_any,但是我知道如何做到這一點,並不是那麼好。
FieldBuilder fieldId = proxy.DefineField("Is" + property.Name + "Init", typeof (Boolean),
FieldAttributes.Private);
Label ExitIfStatement = getIL.DefineLabel();
//getIL.Emit(OpCodes.Ldc_I4_0); // push 0 to the eval stack, this WORKS FINE!
//getIL.Emit(OpCodes.Ldfld, fieldId); // push 0 to the eval stack // THIS FAILD, WHY ?
getIL.Emit(OpCodes.Brtrue_S, ExitIfStatement); // if is[propertyName]init == true goto MarkLabel(ExitIfStatement)
getIL.EmitWriteLine("Test if null is true");
getIL.Emit(OpCodes.Nop);
getIL.MarkLabel(ExitIfStatement);
getIL.EmitWriteLine("Test if null: false");
getIL.Emit(OpCodes.Nop);
getIL.Emit(OpCodes.Ldarg_0); // push the type on stack we need it to call base property
getIL.Emit(OpCodes.Call, propertyInfo.GetGetMethod()); // TEST CODE
getIL.Emit(OpCodes.Ret);
THX,它的工作。 –