【发布时间】:2018-10-22 12:17:31
【问题描述】:
我正在转换为不提供 unchecked 关键字的 VB.NET。但在这个声明中似乎没有必要:
const int dwAccess = unchecked((int)0xC0000000);
我在这里有两个观察:
-
dwAccess被声明为常量 - 分配的值恰好在
System.Int32的范围内
鉴于这些,这样做是否安全:
Const dwAccess As Integer = &HC0000000
在这种情况下使用它:
[DllImport("Kernel32", CharSet = CharSet.Auto, SetLastError = true)]
private static extern SafeFileHandle CreateFile(string lpFileName, int dwAccess, int dwShareMode,
IntPtr securityAttrs, int dwCreationDisposition,
int dwFlagsAndAttributes, IntPtr hTemplateFile);
澄清:这个问题不是关于 unchecked 关键字在 C# 中是否必要。 显然是这样的。这是关于VB.NET中缺少关键字是否会妨碍语句的成功转换。
【问题讨论】:
-
不是 System.Int32 的 0xC0000000 超出范围吗? dotnetfiddle.net/ulwdVX
-
@HenkHolterman 是的,但是 Int32.MaxValue 是 =0x7FFFFFFF;对于更高的数字,您必须使用 UInt32,不是吗?
-
我想我明白了。看来VB默认是
unchecked,而c#如果你想将0xC0000000分配给System.Int32变量则需要指定它 -
不,相反。 VB.NET 始终使用默认项目设置进行检查。而 C# 不是。这让 C# 团队的生活变得困难,他们不得不努力在编译时进行检查。做得不好,很难做到。 VB.NET 编译器对编译时的溢出非常满意,就像往常一样。
标签: c# vb.net code-translation