使用 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 (将#修改为@)