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

时间:2013-08-10 01:49:18

标签: c#

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

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

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

给了我错误:

  

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

虽然我理解错误,但在执行

之前我没有遇到此问题
            if (File.Exists(filepath))
            return 1;
        else
            return 0;

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

int example = 5;
Console.Writeline( example);
Console.Writeline( example + "");

第一个console.writeline会出错,因为C#不会自动刻录为字符串

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

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

2 个答案:

答案 0 :(得分:9)

以下代码

if (File.Exists(filepath))
    return 1;
else
    return 0;

根据C#标准进行编译

  

13.1.7 类型int的常量表达式(第14.16节)可以转换为sbytebyteshort类型,ushortuintulong,前提是constant-expression的值在目标类型的范围内。

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

return Console.CapsLock ? 1U : 0;

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

答案 1 :(得分:8)

1u是1的无符号文字语法。0u代表0。