Tôi đang cố gắng làm cho người khác làm việc trong IL bằng System.Reflection và System.Reflection.Emit. Đây là mã mà tôi hiện có:C# nếu có ngoại lệ khác
Label inequality = new System.Reflection.Emit.Label();
Label equality = new System.Reflection.Emit.Label();
Label end = new System.Reflection.Emit.Label();
var method = new DynamicMethod("dummy", null, Type.EmptyTypes);
var g = method.GetILGenerator();
g.Emit(OpCodes.Ldstr, "string");
g.Emit(OpCodes.Ldstr, "string");
g.Emit(OpCodes.Call, typeof(String).GetMethod("op_Equality", new Type[]{typeof(string), typeof(string)}));
g.Emit(OpCodes.Ldc_I4, 0);
g.Emit(OpCodes.Ceq);
g.Emit(OpCodes.Brtrue_S, inequality);
g.MarkLabel(inequality); //HERE it throws exception
g.Emit(OpCodes.Ldstr, "Specified strings are different.");
g.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[]{typeof(string)}));
g.Emit(OpCodes.Br_S, end);
g.Emit(OpCodes.Brfalse_S, equality);
g.MarkLabel(equality);
g.Emit(OpCodes.Ldstr, "Specified strings are same.");
g.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }));
g.Emit(OpCodes.Br_S, end);
g.MarkLabel(end);
g.Emit(OpCodes.Ret);
var action = (Action)method.CreateDelegate(typeof(Action));
action();
Console.Read();
Bây giờ, trên đường nơi tôi đánh dấu nhãn nó ném tôi ngoại lệ này:
Object tài liệu tham khảo không được đặt để một thể hiện của một đối tượng.
Nhưng tôi nghĩ rằng đó là sự ngu dốt vì nhãn được liên kết với đối tượng Label mới. Có ai biết làm thế nào tôi có thể giải quyết vấn đề này? Cảm ơn.
oh vâng, điều đó đúng. Cảm ơn bạn. – user35443