1

我对 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)data 分配第二个局部变量 request,其中 data 是值为 1 的字节(因为该值是从正在接收的 USB 数据的缓冲区中解码的)。我不知道这是否相关,但以防万一。

我想在声明第二个变量的方法中比较它们,我最初是这样做的:

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

这在大多数情况下都有效,但偶尔会抛出异常,因为这两个值不相等,但是当我在调试器中检查它们时,它们都等于 Request.GetData。这让我想到变量可能是指向对象而不是值的指针,所以我也尝试使用......

!request.Equals(currentRequest)

request.CompareTo(currentRequest)!=0

同样,这两种方法大部分时间都有效,但偶尔会失败,即使在调试器中检查这些值时它们都是 Request.GetData。

真正让我感到困惑的是,它在大多数情况下都能正常工作,只是偶尔会失败——我希望它要么正常工作,要么不能始终如一地工作。

有任何想法吗?

4

1 回答 1

1

不,如果变量是真正的类型Request,那么这是一个类型,使用==应该绝对没问题。

我怀疑调试器向您展示了一些奇怪的东西。我建议您将两者都包括在内requestcurrentRequest并向您展示发生了什么。

于 2011-09-28T11:56:57.197 回答