为什么编译器将bool转换为整数并返回bool而不是返回bool本身?

Jac*_*ack 1 c# ffmpeg aforge

我正在通过ILSPY VideoFileWriterAForge.Video.FFMPEG汇编中读取类(我有兴趣了解特定方法是如何工作的)并且发现了这个:

public bool IsOpen {
    [return: MarshalAs(UnmanagedType.U1)]
    get {
        return ((this.data != null) ? 1 : 0) != 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

是什么原因让bool变成整数而不是回到bool转换this.data != null呢?

Sco*_*ain 10

它是反编译代码,很可能只是反编译器的一个小故障.


在考虑一下之后,这是一个合理的实现,可能会转向相同的编译代码

public enum ConnectionState
{
    Closed = 0,
    Open = 1,
    Opening = 2,
    OtherStuff = 3,
    AndSoOn = 4,
}

public bool IsOpen
{
    get
    {
        ConnectionState state;
        if (this.data != null)
        {
            state = ConnectionState.Open;
        }
        else
        {
            state = ConnectionState.Closed;
        }

        return state != ConnectionState.Closed;
    }
}
Run Code Online (Sandbox Code Playgroud)