Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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
C# 等式和赋值运算符_C#_Vb.net_Operators - Fatal编程技术网

C# 等式和赋值运算符

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

我在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.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