微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 MSIL

如何解决使用 MSIL

当然,我看到很多答案都说你不能在 c# 中显式或隐式地将 bool 转换为 int。但是我想出了一个将bool转换为int的IL代码,如下:

.assembly extern mscorlib
{
  .ver 0:0:0:0
}
.assembly 'bool2int'
{
  .hash algorithm 0x00008004
  .ver  0:0:0:0
}

.class public auto ansi beforefieldinit BoolToInt
    extends [mscorlib]System.Object
{
    .method public hidebysig static int32  Convert(bool args) cil managed
    {
      .maxstack  8
      IL_0000:  ldarg.0
      IL_0001:  ret
    }
} 

然后将代码编译成dll后,你应该可以将其用作:

BoolToInt.Convert(someBoolValue);

我使用来自其他论坛和 MSIL 教程的知识提出了这个想法。我想知道的是:

这有什么用?它的表现如何?它是否与(或接近)c/c++ 中的 bool -> int 隐式转换相同?它实际上更快,还是在引擎盖下使用 Convert.ToInt32 ?甚至值得付出努力吗? 我试图衡量性能,但没有奏效。即使“if”语句似乎不会影响我的分析器代码中的性能,您也明白这一点,我无法检查性能。我想知道你的想法。

注意: 1)我确实研究了互联网,我很长时间都在研究将 bool 转换为 int 的主题,但从未见过有人提到为此编写 IL 代码。 2)为什么我什至认为它会更快,首先是在另一个关于枚举作为字典键类型的性能问题的线程上,一个通用的解决方案是编译和使用类似的 IL 代码用于 struct (enum) to int转换器并使用它我们可以为枚举键类型字典编写一个通用比较器。所以我认为可能是类似的代码可能有助于减少分支并获得一些性能提升:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。