我正在处理一个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的修正,但是对于无符号的整数)
答案 0 :(得分:9)
以下代码
if (File.Exists(filepath))
return 1;
else
return 0;
根据C#标准进行编译
13.1.7 类型
int
的常量表达式(第14.16节)可以转换为sbyte
,byte
,short
类型,ushort
,uint
或ulong
,前提是constant-expression的值在目标类型的范围内。
没有像为条件表达式定义的隐式转换,因此您的第一个代码段需要显式强制转换或U
后缀:
return Console.CapsLock ? 1U : 0;
请注意,只需要一个转换/后缀,因为根据上面的规则13.1.7,零可以转换为uint
。
答案 1 :(得分:8)
1u
是1的无符号文字语法。0u
代表0。