C#返回UInt32 vs Int32 - C#思考0和1是Int32

Gar*_*nes 5 c#

我正在研究一个C#DLL绑定到UDK,你必须为bool值返回一个无符号的32位整数 - 因此0是假的,任何更大的都是真的.UDK获取值并将其转换为true或false ...

我正在做一些代码,发现这个:

[DllExport("CheckCaps", CallingConvention = CallingConvention.StdCall)]
    public static UInt32 CheckCaps()
    {
        return ( Console.CapsLock ? 1 : 0);
    }
Run Code Online (Sandbox Code Playgroud)

给了我错误:

"错误,无法将类型'int'隐式转换为'uint'.存在显式转换(您是否错过了转换?)"

虽然我理解错误,但在做之前我没有遇到这个问题

            if (File.Exists(filepath))
            return 1;
        else
            return 0;
Run Code Online (Sandbox Code Playgroud)

从它看起来像C#的字符串类型转换问题的方式,如果你有这个:

int example = 5;
Console.Writeline( example);
Console.Writeline( example + "");
Run Code Online (Sandbox Code Playgroud)

第一个console.writeline会出错,因为C#不会自动将类型转换为字符串

我理解这些错误背后有逻辑原因(因为它们出现在这些情况下),但除了执行Convert.ToUInt32(1)和Convert.ToUInt32(0)之外,还有其他方法吗?

(我希望得到一个类似于如何为浮点数去0.f的修正,但对于无符号的整数)

das*_*ght 9

下面的代码

if (File.Exists(filepath))
    return 1;
else
    return 0;
Run Code Online (Sandbox Code Playgroud)

根据C#标准编译

13.1.7类型的常量表达式(§14.16)int可以转换为类型sbyte,byte,short,ushort,uint,或ulong,所提供的常数表达式的值在目标类型的范围内.

没有像为条件表达式定义的隐式转换,因此您的第一个代码段需要显式强制转换或U后缀:

return Console.CapsLock ? 1U : 0;
Run Code Online (Sandbox Code Playgroud)

请注意,只需要一个转换/后缀,因为零可以uint根据上面的规则13.1.7 进行转换.


rec*_*ive 8

1u是1.的无符号文字语法 0u是0.