Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
vb.net-为什么+;=不允许操作员使用ULong(UInt64)?_.net_Vb.net - Fatal编程技术网

vb.net-为什么+;=不允许操作员使用ULong(UInt64)?

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

为什么我可以在创建时为ULong赋值

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,我在每次数学运算或变量声明中都会这样做,即使是整数,数字文字也是一种实用的自定义编码。再一次,上的
选项严格保存了这一天。