问题标签 [dynamicmethod]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 为方法发出代码时取消装箱 Nullable 使评估堆栈处于意外(对我而言)状态
概述(请原谅我如此详细,但我宁愿它太多也不愿太少):我正在尝试编辑我们解决方案的 Dapper 源,这样当从数据库中读取任何 DateTime 或 Nullable 时,其 DateTime.Kind 属性始终设置为 DateTimeKind.Utc。
在我们的系统中,所有来自前端的 DateTime 都保证为 UTC 时间,并且数据库(Sql Server Azure)将它们存储为 UTC 中的 DateTime 类型(我们不使用 DateTimeOffsets,我们只是始终确保 DateTime在将其存储在数据库中之前是 UTC。)
我一直在阅读有关如何使用 ILGenerator.Emit(...) 为 DynamicMethods 生成代码的所有内容,并且觉得我对它如何与评估堆栈、本地人等一起工作有一个不错的理解。在我努力解决这个问题的过程中问题,我已经编写了一些代码示例来帮助我达到最终目标。我写了一个 DynamicMethod 以一个 DateTime 作为参数,调用 DateTime.SpecifyKind,返回值。那么DateTime也一样吗?类型,使用其 Nullable.Value 属性获取 SpecifyKind 方法的 DateTime。
这就是我的问题所在:在 dapper 中,DateTime(或 DateTime?我实际上并不知道,但是当我将它视为要么我没有得到我期望的结果时)被装箱了。因此,当我尝试使用 OpCodes.Unbox 或 OpCodes.Unbox_Any,然后将结果视为 DateTime 或 DateTime?时,我会收到 VerificationException:操作可能会破坏运行时的稳定性。
显然我错过了一些关于拳击的重要内容,但我会给你我的代码示例,也许你可以帮助我让它工作。
这有效:
我在这里得到了我的期望。耶!但这还没有结束,因为我们要处理拆箱...
这只是直接不会运行。我得到了 VerificationException,然后我在角落里哭了一会儿,直到我准备好再试一次。
我尝试过期待 DateTime 而不是 DateTime?(拆箱后,假设 DateTime 在 eval 堆栈上,而不是 DateTime?)但这也失败了。
有人可以告诉我我错过了什么吗?
.net - 如何使用 DynamicMethod.CreateDelegate 以实例对象返回字段值
如问题中所述,我有兴趣使用 .net 的动态功能来缓存对象的字段 getter/setter 并在运行时调用它。
使用来自的信息: 有没有办法创建一个委托来获取和设置 FieldInfo 的值?
我已经组合了一个类和函数来设置我需要的功能:
我称这个好代码为:
但是,我被难住的部分是如何修改函数CreateGetter
以便能够以缓存形式使用它,例如:(缓存实例对象)
我意识到这可能需要对 IL 代码进行一些修改,CreateGetter
但这是我遇到的棘手部分。
c# - 如何调用动态方法返回数字平方?
我想创建一个简单的动态方法,它返回整数的平方(即 - 如果数字是 5,它应该返回 25)。
我写了下面的代码: -
为什么我会收到“InvalidProgramException”
int retval = hi(42);
我怎样才能让这个东西工作?
.net - System.Reflection.Emit::DynamicMethod:是否有工具可以从现有程序集生成 IL 代码?
我想用代码创建一个动态方法,这不仅仅是微不足道的。
所以我想创建一个方法体的硬编码版本,并通过一些工具检查它的编译版本,该工具将 OpCos 和参数返回给我,这样我就可以使用ILGenerator::Emit()
.
有没有这样的工具可用?(也许这是一个愚蠢的问题。不过,我无法使用 Google 找到它。)
c# - 有没有办法查看生成的 DynamicMethod 的 IL 代码(在 Sigil 中)?
我正在使用Sigil创建一个DynamicMethod
并希望查看生成的 IL。
我以前从未合作过,DynamicMethods
所以也许有一个非常明显的答案,但到目前为止我还没有找到任何东西。
这是一个类似的问题,但它已经很老了,我不知道链接工具是否适用于 VS2013 - 我想也许有更新的东西可用。将生成的方法存储在程序集中并将其写入磁盘可能是可行的,但这在开发过程中非常麻烦。
顺便说一句,我知道out string instructions
SigilCreateDelegate
方法的参数,但这似乎不是“真正的”IL 代码(包含例如命名标签),我也不确定这是在 Sigil 优化之前还是之后。
编辑:正如@svick 建议的那样,我最终创建了一个动态程序集并将其写入磁盘。然后可以使用 来查看发出的方法的 IL ildasm
。如果有人想做同样的事情,这是我使用的代码:
c# - 通过 DynamicMethod 调用可变参数方法
我正在尝试使用 DynamicMethod 调用非托管的类似 printf 的函数。在运行时我得到一个
BadImageFormatException:找不到索引。(来自 HRESULT 的异常:0x80131124)
这是运行时的限制还是我发出的代码是错误的?
c# - 如何使用 IL (C#) 实现浅拷贝?
我想用 C# IL 实现一个浅拷贝,而不是直接反射。
• ShallowCopy 版本直接反射:
• 我当前的 IL 版本代码是:
我只知道如何构造一个实例,但我不知道如何复制他人的字段或属性。
有人可以帮我吗?
如果你能帮助我,真的很感激?
c# - 当泛型事件发生时调用方法
在尝试实现对应在运行时定义的事件触发的方法的调用时,我遇到了问题。我找到了这个答案:
并实现了该解决方案,但是当要调用的方法是实例而不是静态时,我不断收到异常。这是我的部分代码:
我找不到摆脱该异常的方法,如果我将SetFlag()方法设置为静态,则代码可以正常工作,但这不是我需要的。任何建议将不胜感激。提前致谢。
c# - DynamicMethod 调用实例方法
如果我从类方法内部创建一个 DynamicMethod,我如何从 DynamicMethod 委托调用我的类的另一个方法?我需要以某种方式在 DynamicMethod 代码中捕获 this 引用。但是我找不到以对象为参数的 ILGenerator.Emit 的重叠版本。
代码到目前为止:
我的问题是标有???
c# - 如何创建动态方法来处理事件?
在 C# 中,如何创建可用于处理事件的动态方法?
这是一个事件:
这是一个方法:
如何动态创建处理刷新事件的方法,以便动态方法调用 Test 方法?
上面的 Test 方法是要调用的方法的示例。