请不要再回答,问题解决了。跳到问题的最后,看看我做错了什么。
我正在运行以下Function
,以FilePath
(Function
读取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
答案 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