Vb.net 为什么“a”;尺寸A=新长?=新长;评估为零?

Vb.net 为什么“a”;尺寸A=新长?=新长;评估为零?,vb.net,Vb.net,为什么Dim A=New Long?=新长?当Dim A=Nothing=Nothing计算为True时,计算为Nothing 只是想知道纯粹出于好奇 我希望他们都能证明是真的。如果我说: 如果新长?=新长?然后 Dim foo=“你好” 如果结束 内部声明不会被击中。然而,Nothing=没有任何东西会影响该声明。我猜这是编译器如何处理可为空的long,但需要一个深入的解释。有关解释,请参阅 繁殖 如果算术运算、比较运算、移位运算或类型运算的一个或两个操作数可为空,则运算结果也可为空 现在值

为什么
Dim A=New Long?=新长?
Dim A=Nothing=Nothing
计算为True时,计算为Nothing

只是想知道纯粹出于好奇

我希望他们都能证明是真的。如果我说:

如果新长?=新长?然后
Dim foo=“你好”
如果结束
内部声明不会被击中。然而,Nothing=没有任何东西会影响该声明。我猜这是编译器如何处理可为空的long,但需要一个深入的解释。

有关解释,请参阅

繁殖

如果算术运算、比较运算、移位运算或类型运算的一个或两个操作数可为空,则运算结果也可为空

现在值得注意的是,c#在这里采取了不同的方法

new long?() == new long?() => true
但是,您可以绕过语言设计器选项

(New Long?).Equals(New Long?) => True

(New Long?)?.Equals(New Long?) => Nothing

出于好奇,这段代码的应用程序是什么?除了实现这一点,你没有其他选择吗?或者这仅仅是一个家庭作业类型的问题?所有的解释都在第一部分。如果您理解对C语言的引用,并且遇到了经典(可空类型必须有值)异常,那么就更清楚了。将其拼写为
Dim a as Boolean?
,它就开始有意义了。使用无值的nullable的表达式生成无值的nullable。您可以使用
Dim a=New Long?.Equals(New Long?)
对其进行测试。特定对象提供的相等比较器可以对该对象具有特定含义。您还可以看一看,我相信该行为与VBA系列中条件运算符中的
Null
行为是一致的。请记住,在VB中,
Nothing
表示“type的默认值”,因此它与C#中的
Default
最接近,而不是
null