为什么我可以在创建时分配ULong一个字面值
Dim myULong As ULong = 0
Run Code Online (Sandbox Code Playgroud)
但是选项严格,我不能像下面那样增加?
myULong += 1
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2013告诉我
Option Strict On disallows implicit conversions from 'Decimal' to 'ULong'.
Run Code Online (Sandbox Code Playgroud)
我不知道VS如何在该行代码中输出小数...
感谢您的输入!
如果两个操作数具有不同的数据类型,则算术表达式的结果将是更精确的数据类型.
因为UInt64.MaxValue大于Int32.MaxValue向UInt64值增加值会Int32产生a Decimal(参见:加宽和缩小转换),而不是Int32哪个范围与...相比太小UInt64.结果也可能是负面的,所以UInt64也不是一个好的选择.实际上没有隐式转换UInt64为任何其他整数类型,而不是偶数Int64(Long),因为它的范围更小.
如果您尝试将结果重新分配给UInt64vaue,那么这就是您遇到编译器错误的原因.
你要么必须施展它:
myULong = CULng(myULong + 1)
Run Code Online (Sandbox Code Playgroud)
或(更好)1UL首先使用:
myULong += 1UL
Run Code Online (Sandbox Code Playgroud)
MSDN:
类型不安全的转换,使用Option Strict On导致编译器错误.例如,如果尝试将Integer变量添加到Double变量并将值分配给Integer变量,则会产生编译器错误,因为Double变量不能隐式转换为Integer类型.
顺便说一下,C#会自动使用正确的类型,所以这个编译:
UInt64 myULong = 1;
myULong += 1; // here 1 is treated as UInt64
Run Code Online (Sandbox Code Playgroud)
而这不会编译
myULong += -1; // -1 is Int32
Run Code Online (Sandbox Code Playgroud)