2016-07-22 4 views
0

Нет ответа, пожалуйста, проблема была решена. Перейдите к концу вопроса, чтобы увидеть, что я сделал неправильно.Xor не срабатывает


Я бегу следующий Function прочитать синтаксис конкретного стандарта либо FilePath (Function читает file first, чтобы получить строку) или сам Text (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 Booleans к XOR он должен возвращать только Правда, когда 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

Две отдельные функции 'ReadStandardFromFile()' и 'ReadStandardFromText()', вероятно, более разумны. Что значит «не работает»? –

+0

В этом случае есть масса различных способов работы. Но дело не в этом. Для будущих проектов это будет полезно для использования Xor. Вот почему я спрашиваю. Чтобы понять логику VB.Net Xor. – Luke

+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 
+0

Проблема была решена с помощью Alread и undestanding. Xor никогда не был вопросом. Но ваши объяснения совершенно точны и хорошо подходят для тех, кто еще не знает Xor. Я собираюсь отметить это как ответ, чтобы люди перестали публиковать здесь. Хороших выходных! – Luke

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 

Вызов, как это (Х пример пути) обеспечивает правильный ответ:

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

Осознавайте вызова, как ReadStandard("", "X"), потому что это означает FilePath не пусто.

BR

+0

Ты поздно. Прочтите комментарии к вопросу, пожалуйста :-) – Luke

+0

Argh :) Но если это ваше решение, вы можете просто использовать'If IsNothing (FilePath) = IsNothing (Standard_Text) Then' – pLurchi

+0

Конечно, это было бы простое решение. Но я думаю, что Xor делает его более читаемым в этом случае, потому что смысл Xor означает, что один ДОЛЖЕН быть установлен, в то время как другой не должен быть установлен. Тем не менее, его решение и спасибо за ваш совет. – Luke