IL에서 방출자를 만들려고하지만이 설정자는 null이 아닌 개체 만 받아 들여야합니다. 그렇지 않은 경우 예외를 throw해야합니다. 이것은 il Generator와 setter (null이 아닌 경우)가 값을 저장해야하는 FieldBuilder를받는 My class Notnull입니다.일리노이 연결 끊김 컨텍스트 오류를 내 보냅니다
public class NonNull
{
public void CreateIL(ILGenerator il, FieldBuilder field)
{
il.Emit(OpCodes.Ldarg_0); // Push "this" on the stack
il.Emit(OpCodes.Newobj, typeof(Utils).GetConstructor(new Type[] { }));
il.Emit(OpCodes.Stloc_1);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Stloc_2);
il.Emit(OpCodes.Ldloc_2);
il.Emit(OpCodes.Ldloc_1); // Push "value" on the stack
il.Emit(OpCodes.Callvirt,typeof(Utils).GetMethod("checkIfNull"));
il.Emit(OpCodes.Pop);
il.Emit(OpCodes.Ldloc_2);
il.Emit(OpCodes.Stfld, field); // Set the field "_Name" to "value"
il.Emit(OpCodes.Ret);
}
}
IL에서 호출하여 예외를 throw하는 클래스 utils입니다.
class Utils
{
public void checkIfNull(object obj)
{
if (obj == null) throw new MyException();
}
}
이 IL이있는 새 유형을 만들려고하면 연결이 끊어진 컨텍스트 오류가 발생합니다.
당신이 전체 오류를 게시 할 수 있을까요? 스택 추적을 포함하여 예외라고 가정합니다. – svick