C# 等式和赋值运算符
我在VB.NET中编译了一个程序集,其中包含两个运算符:C# 等式和赋值运算符,c#,vb.net,operators,C#,Vb.net,Operators,我在VB.NET中编译了一个程序集,其中包含两个运算符: Public Shared Operator =(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean Return quarterA.StartDate = quarterB.StartDate AndAlso quarterA.EndDate = quarterB.EndDate AndAlso quarterA
Public Shared Operator =(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean
Return quarterA.StartDate = quarterB.StartDate AndAlso
quarterA.EndDate = quarterB.EndDate AndAlso
quarterA.Quarter = quarterB.Quarter
End Operator
Public Shared Operator <>(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean
Return Not (quarterA = quarterB)
End Operator
我需要做什么才能使相等运算符正常工作?当我按原样实现代码并将实例与null进行比较时,我在相等运算符中得到一个
NullReferenceException
。但是,如果我添加空检查,它可以正常工作:
Public Shared Operator =(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean
If quarterA Is Nothing OrElse quarterB Is Nothing Then Return False
Return quarterA.StartDate = quarterB.StartDate AndAlso
quarterA.EndDate = quarterB.EndDate AndAlso
quarterA.Quarter = quarterB.Quarter
End Operator
我怀疑是其他原因导致了你的错误
当您应该使用相等运算符(=
)时,您很可能正在使用赋值运算符(=
):
此外,我建议您使用相等运算符。无论是在VB还是C中,都不能重载赋值运算符
你为什么要谈论作业?您的代码不包含任何赋值。你能给出一个简短而完整的例子(VB和C#)来说明这个问题吗?@CodesInChaos,你是对的。我又看了一遍代码,把它和另一个无关的代码弄错了。谢谢你指出这一点。是的,就是这样。需要在运算符中进行空检查。奇怪的是,在向操作符添加null检查,然后再次删除它以验证其效果之后,我开始像您一样接收NullReferenceException。我不确定我以前是如何得到类型转换错误的,但现在它消失了。非常感谢。在进一步测试之后,看起来我还需要包括
,如果quartea为Nothing,quarteb为Nothing,那么在操作符中的null检查之前返回True
。
Public Shared Operator =(quarterA As CalendarQuarter, quarterB As CalendarQuarter) As Boolean
If quarterA Is Nothing OrElse quarterB Is Nothing Then Return False
Return quarterA.StartDate = quarterB.StartDate AndAlso
quarterA.EndDate = quarterB.EndDate AndAlso
quarterA.Quarter = quarterB.Quarter
End Operator
if (qtr = null) // wrong - assigning null to qtr
if (qtr == null) // correct