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

C# 为什么编译器将bool转换为整数并返回bool,而不是返回bool本身?,c#,ffmpeg,aforge,C#,Ffmpeg,Aforge,我当时正在通过ILSPY阅读来自arge.Video.FFMPEG汇编的VideoFileWriter类,我想了解特定方法的工作原理,并发现: public bool IsOpen { [return: MarshalAs(UnmanagedType.U1)] get { return ((this.data != null) ? 1 : 0) != 0; } } 为什么要将布尔值转换为整数而不是返回布尔值,而不只是这样做。数据!=空?这是反编译代码,可

我当时正在通过ILSPY阅读来自arge.Video.FFMPEG汇编的VideoFileWriter类,我想了解特定方法的工作原理,并发现:

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

为什么要将布尔值转换为整数而不是返回布尔值,而不只是这样做。数据!=空?

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

考虑一下,这里有一个合理的实现,它可能会使用相同的编译代码

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;
    }
}

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

考虑一下,这里有一个合理的实现,它可能会使用相同的编译代码

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;
    }
}

Try compare with justdecompiler Try with dotpeek Try compare with justdecompiler Try with dotpeek有意义。我尝试了其他反编译器并得到了不同的输出,比如` public bool IsOpen{get{object obj;if this.data!=null{obj=1;}else{obj=null;}return byteobj;}}}`有意义。我尝试了其他反编译器并得到了不同的输出,比如` public bool IsOpen{get{object obj;if this.data!=null{obj=1;}else{obj=null;}返回字节对象;}}`