0

C++:DWORD dwState = (DWORD)-1;

这里没有问题。

C#: uint state = -1;

在这里,被认为等同于 DWORD 的 uint 或 UInt32 不能有负值,它会抛出异常。

对于 UInt32,值太大或太小

我有一个代码可以从 cpp 和 c# 程序中读取这个值(存储在 DB 中)。Cpp 将无效状态标记为 -1。因此,我无法使用 uint 类型从 C# 前端读取它。我无法在 c++ 程序中更改此类型。除了 -1,cpp 可以为变量写入 0-65536 之间的任何值。

我该如何从 C# 前端处理它!?

4

1 回答 1

2

我该如何从 C# 前端处理它!?

您可以使用unchecked运算符进行常量赋值:

uint state = unchecked((uint) -1);

从 C# 规范第 7.6.12 节:

checkedandunchecked运算符用于控制整数类型算术运算符和转换的溢出检查上下文

...

对于常量表达式(可以在编译时完全求值的表达式),默认的溢出检查上下文总是checked. 除非将常量表达式显式放置在unchecked上下文中,否则在表达式的编译时求值期间发生的溢出总是会导致编译时错误。

于 2013-10-04T14:42:50.190 回答