Проблемы сравнения переменных - PullRequest
1 голос
/ 28 сентября 2011

Я все еще относительно новичок в C #, и ответ на этот вопрос, вероятно, довольно очевиден, но я изо всех сил пытаюсь решить его

У меня перечисление определено следующим образом:

enum Request {
    None = 0,
    GetData,
    SendData,
    some other values...
};

Затем у меня есть две переменные, которые определены как тип запроса следующим образом

Request currentRequest; // This is a class member variable
Request request; // This is a local variable within a method.

Первая переменная назначается с использованием currentRequest = Request.GetData; Второй запрос локальной переменной назначается с использованием данных request = (Request), где данные представляют собой байт значения 1 (поскольку значение декодируется из буфера принимаемых данных USB). Я не знаю, относится ли это к делу, но упомяну это на всякий случай.

Я хочу сравнить их в методе, в котором объявлена ​​вторая переменная, изначально я делал это так:

if(request != currentRequest)
{
    // Throw an exception
}

Это работает большую часть времени, но иногда выдается исключение, потому что два значения не равны, однако, когда я проверяю их в отладчике, они оба равны Request.GetData. Это заставило меня задуматься о том, что переменные могут быть указателями на объекты, а не на значения, поэтому я попытался также использовать ...

!request.Equals(currentRequest)

и

request.CompareTo(currentRequest)!=0

и аналогично оба они работают большую часть времени, но иногда терпят неудачу, даже если при проверке значений в отладчике они оба являются Request.GetData.

Что меня по-настоящему смутило, так это то, что он работает большую часть времени, просто иногда не работает - я ожидал, что он будет работать или не работать последовательно.

Есть идеи?

1 Ответ

1 голос
/ 28 сентября 2011

Нет, если переменные действительно имеют тип Request, то это тип значение , и использование == должно быть абсолютно нормальным.

Я подозреваю, что отладчик показывает вам что-то странное. Я предлагаю вам сделать исключение, включив оба параметра request и currentRequest, чтобы показать вам, что происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...