Xor不开火

时间:2016-07-22 10:32:50

标签: vb.net xor

请不要再回答,问题解决了。跳到问题的最后,看看我做错了什么。

我正在运行以下Function,以FilePathFunction读取file first来获取字符串)或{来自Text来读取特定标准的语法{1}}本身(skips file reading

Public Function ReadStandard(Optional ByVal FilePath As String = Nothing, _
Optional ByVal Standard_Text As String = Nothing) As Boolean

要使其成为可能,只能设置其中一个参数,而另一个参数不能设置。我不想使用像

这样的功能
Public Function ReadStandard(str as String, isFilePath as Booelean) As Boolean

所以为了使这成为可能,我想使用Xor,因为它应该完成确切的工作 (如果你将2个布尔值传递给XOR,它应该只返回True,当A!= B时)。做一些研究我发现这适用于vb.net:MSDN

但由于某种原因,它对我不起作用;

If IsNothing(FilePath) Xor IsNothing(Standard_Text) Then (...)

有原因吗?或者我忘记了我在那些日子里学到了什么?

事实证明,我只是在逻辑上混淆了一些东西。在以下函数中,我忘记将Not放入If-Statement

If Not (IsNothing(FilePath) Xor IsNothing(Standard_Text)) Then
  Throw New ArgumentException("FilePath or Standard_Text must be set.")
  Return False
End If

2 个答案:

答案 0 :(得分:1)

XOR可以被认为是没有进位的二进制加法。

    If False Xor False Then '0+0
        Stop
    End If

    If True Xor False Then '1+0
        Stop
    End If

    If False Xor True Then '0+1
        Stop
    End If

    If True Xor True Then '1+1
        Stop
    End If

答案 1 :(得分:0)

你的通话怎么样?我试过你的样本,它正在运作。

Public Function ReadStandard(Optional FilePath As String = Nothing,   Optional Standard_Text As String = Nothing) As Boolean

    ReadStandard = False
    If IsNothing(FilePath) Xor IsNothing(Standard_Text) Then
        ReadStandard = True
    End If

End Function

这样调用(X是示例路径)提供了正确答案:

ReadStandard(,)         --> False
ReadStandard(, "X")     --> True
ReadStandard("X",)      --> True
ReadStandard("X", "X")  --> False

请注意调用ReadStandard("", "X"),因为这意味着FilePath不为空。

BR