为什么这个NHibernate代码执行一系列显式转换?

Jus*_*gan 0 .net c# nhibernate casting

我正在浏览我的NHibernate项目(版本3.3.1.4000)的源代码,我刚注意到AnywhereMatchMode类中有一些奇怪的东西:

public override string ToMatchString(string pattern)
{
    return (string) (object) '%' + (object) pattern + (string) (object) '%';
}
Run Code Online (Sandbox Code Playgroud)

为什么他们会在一个对象上投射一个字符并立即将其重新投射到一个字符串?为什么在将字符串添加到其他字符串之前将其转换为对象?这里有性能奖励,还是要避免的边缘情况?我正在寻找这个代码背后的想法,因为必须有一个理由.

注意:我刚刚意识到,我在这里使用了ReSharper的"导航到"功能,所以这可能是我正在查看的反编译代码.即使是这样,我也想知道这里发生了什么.

SLu*_*k49 5

看起来它可能只是ReSharper的"导航到"的工件,查看NHibernate的源代码,该方法如下所示:

public override string ToMatchString(string pattern)
{
    return '%' + pattern + '%';
}
Run Code Online (Sandbox Code Playgroud)

NHibernate源代码

更新:这是此方法的MSIL:

.method public hidebysig virtual instance string 
        ToMatchString(string pattern) cil managed
{
  // Code size       26 (0x1a)
  .maxstack  3
  .locals init ([0] string CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldc.i4.s   37
  IL_0003:  box        [mscorlib]System.Char
  IL_0008:  ldarg.1
  IL_0009:  ldc.i4.s   37
  IL_000b:  box        [mscorlib]System.Char
  IL_0010:  call       string [mscorlib]System.String::Concat(object,
                                                              object,
                                                              object)
  IL_0015:  stloc.0
  IL_0016:  br.s       IL_0018
  IL_0018:  ldloc.0
  IL_0019:  ret
} // end of method AnywhereMatchMode::ToMatchString
Run Code Online (Sandbox Code Playgroud)

由于代码将字符串连接编译为优化string.Concat("%", pattern, "%"),因此当Resharper反编译时,它看起来可能代表拳击作为强制转换object.