首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应该是常量布尔值的奇怪行为

应该是常量布尔值的奇怪行为
EN

Stack Overflow用户
提问于 2022-02-28 21:48:20
回答 1查看 42关注 0票数 0

当我发现一些非常奇怪的行为时,我正在与奇妙的SharpLab.io玩耍,试图更好地理解c#降低。

我观察到下面这句话的降低

代码语言:javascript
复制
public class C {

    bool a;

    public void M() 
    {
       a = a && false;
    } 
}

似乎被降下到

代码语言:javascript
复制
public class C
{
    private bool a;

    public void M()
    {
        a = !a && false;
    }
}

a = !a && false;降低到a = a && false;

我的问题是

  • 怎么回事,为什么要把代码从a && false降低到!a && false
  • 为什么它也要做蛋白石(!a && falsea && false)
  • 为什么它不能告诉这个表达式总是简单地计算为false (我理解ref类型可以覆盖bool强制转换,但这只是内部构建的bool类型)

(a = false && aa = false && !a都正确地降低到a = false)

EN

回答 1

Stack Overflow用户

发布于 2022-02-28 22:01:26

由于M的结果总是==为假,所以无论你看到a还是!a,都不重要。当我看到vs2022的输出时,Il间谍也是这么说的

代码语言:javascript
复制
.class public auto ansi beforefieldinit C
    extends [System.Runtime]System.Object
{
    // Fields
    .field private bool a

    // Methods
    .method public hidebysig 
        instance void M () cil managed 
    {
        // Method begins at RVA 0x2050
        // Code size 20 (0x14)
        .maxstack 8

        // {
        IL_0000: nop
        // a = !a && false;
        IL_0001: ldarg.0
        IL_0002: ldarg.0
        IL_0003: ldfld bool C::a
        IL_0008: brfalse.s IL_000d

        IL_000a: ldc.i4.0
        IL_000b: br.s IL_000e

        IL_000d: ldc.i4.0

        IL_000e: stfld bool C::a
        // }
        IL_0013: ret
    } // end of method C::M

    .method public hidebysig specialname rtspecialname 
        instance void .ctor () cil managed 
    {
        // Method begins at RVA 0x2065
        // Code size 8 (0x8)
        .maxstack 8

        // {
        IL_0000: ldarg.0
        // (no C# code)
        IL_0001: call instance void [System.Runtime]System.Object::.ctor()
        // }
        IL_0006: nop
        IL_0007: ret
    } // end of method C::.ctor

} // end of class C
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71301428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档