il

    2热度

    1回答

    当我编译下面的代码调试... public class MyClass { private int myField; public int MyProperty { get { return myField; } set { myField = value; } } } ......看似无用的指令奇怪的字节码编译器产生。例如

    0热度

    2回答

    我的库有一些方法,它的返回值不应该被丢弃。作者,即使对我来说,泄漏它们也是一个非常流行的错误。所以我希望编译器在程序员提醒时提醒。 这样的值可以被存储或用作另一种方法的参数。这不是严格使用存储的值,但如果简单地丢弃它是100%的错误。 是否有任何简单的设置方式来为我的图书馆用户强制执行此操作? var x = instance.Method(); // ok field = instance.M

    4热度

    3回答

    当我们声明的int例如一个变量: int i = 4; 生成以下IL: IL_0001: /* 1A | */ ldc.i4.4 我可以理解,图1A是十六进制表示4,那么我的理解是否正确:保存十六进制值是用来指它的值还是意味着不同的东西? 当我宣布一个双变量,如: double d = 12.34; 继IL产生这我不能够得到一些东西在里面: IL_0003: /* 23 | A

    5热度

    1回答

    我想在运行时使用反射创建一个方法的副本。 我有以下代码。 public static R CopyMethod<T, R>(Func<T, R> f, T t) { AppDomain currentDom = Thread.GetDomain(); AssemblyName asm = new AssemblyName(); asm.Name = "Dynamic

    1热度

    1回答

    我正在构建一个使用反射的动态方法。大多数教程和文档(例如How to: Define and Execute Dynamic Methods或Creating method dynamically, and executing it)都显示了一个非常简单的示例。 我试图找到一种方法来引用动态程序集中的另一个程序集。 例如,我希望能够通过使用Reflection.Emit构造以下功能。 public

    2热度

    1回答

    我想将sql日志记录注入到几个方法中。基本上,我想改造 public static object IDbCommandTest_ExecuteScalar(IDbCommand command) { // .. do stuff command.CommandText = "SELECT ..."; var obj = command.ExecuteS

    1热度

    2回答

    正如我看到的C#编译器和Reflection.Emit总是发出.locals init值和引用类型的变量(即使他们后来无条件地初始化)。 .maxstack 1 .locals init ( [0] object x) L_0000: ldloca.s x L_0002: call void Program::MethodWithOut(object&)

    5热度

    1回答

    .method public static void Test<class T>(object A_0) cil managed { // Code size 13 (0xd) .maxstack 1 .locals init (!!T V_0) IL_0000: ldarg.0 IL_0001: isinst !!T IL_000

    6热度

    2回答

    我有这样的代码来发送加载整数或字符串值的IL代码。但我不知道如何添加decimal类型。它在Emit方法中不受支持。任何解决方案? ILGenerator ilGen = methodBuilder.GetILGenerator(); if (type == typeof(int)) { ilGen.Emit(OpCodes.Ldc_I4, Convert.ToInt32(value

    0热度

    1回答

    我试图从接口创建一个代理类。在方法中,我只想收集对象数组中的所有参数并传递给已知的方法。所以我设法让它在没有参数和返回类型的情况下工作。只要我尝试创建我的数组,我会得到“其他信息:公共语言运行时检测到一个无效的程序。”..真的不知道如何从这里调试和IL代码似乎是正确的(?)。 public class Program { static void Main(string[] args)