vb.net-为什么+;=不允许操作员使用ULong(UInt64)?
为什么我可以在创建时为ULong赋值vb.net-为什么+;=不允许操作员使用ULong(UInt64)?,.net,vb.net,.net,Vb.net,为什么我可以在创建时为ULong赋值 Dim myULong As ULong = 0 但由于选项严格,我不能像下面这样递增吗 myULong += 1 Visual Studio 2013告诉我 Option Strict On disallows implicit conversions from 'Decimal' to 'ULong'. 我不知道VS是如何在那行代码中写出小数的 谢谢你的意见 如果两个操作数的数据类型不同,则算术表达式的结果将是更精确的数据类型 由于UInt64.M
Dim myULong As ULong = 0
但由于选项严格,我不能像下面这样递增吗
myULong += 1
Visual Studio 2013告诉我
Option Strict On disallows implicit conversions from 'Decimal' to 'ULong'.
我不知道VS是如何在那行代码中写出小数的
谢谢你的意见 如果两个操作数的数据类型不同,则算术表达式的结果将是更精确的数据类型 由于
UInt64.MaxValue
大于Int32.MaxValue
将UInt64
值添加到Int32
值会产生一个Decimal
(请参见:)而不是Int32
,与UInt64
相比,该范围太小。结果也可能是负面的,因此UInt64
也不是一个好的选择。实际上,没有从UInt64
到任何其他整数类型的隐式转换,甚至没有Int64
(Long
),因为它的范围更小
这就是为什么如果尝试将结果重新分配给UInt64
vaue,会出现编译器错误
你要么投下它:
myULong = CULng(myULong + 1)
或者(更好)首先使用1UL
:
myULong += 1UL
:
输入不安全的转换,导致编译器错误,选项为Strict
在…上例如,如果尝试将整数变量添加到Double
变量,并将该值赋给整数变量,即编译器错误
结果,因为双变量不能隐式转换为
输入整数
顺便说一下,C#将自动使用正确的类型,因此编译:
UInt64 myULong = 1;
myULong += 1; // here 1 is treated as UInt64
然而这不会编译
myULong += -1; // -1 is Int32
为什么UInt64+[U]Int32->[U]Int64不工作?myULong+=1UL不工作吗?(我不太熟悉VB、.NET或VS)@user2864740,因为Int32可能是负数。考虑一些积极的UIT64小于ABS(It32。min)添加到It32.min。结果将是一些负数。@user2864740:因为
Int32
可以是负数,所以UInt64+Int32
的结果也可以是负数。因此,UInt64
不是一个选项。历史上,visualbasic有很多。你必须在这里使用1UL
。你应该使用文字来表示正确的数据类型,1UL,我在每次数学运算或变量声明中都会这样做,即使是整数,数字文字也是一种实用的自定义编码。再一次,上的选项严格保存了这一天。