1

私はまだC#に比較的慣れていないため、これに対する答えはおそらくかなり明白ですが、解決するのに苦労しています

次のように定義された列挙型があります。

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

次に、次のようにタイプ Request として定義された 2 つの変数を用意します。

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

最初の変数は currentRequest = Request.GetData; を使用して割り当てられます。2 番目のローカル変数 request は、request = (Request)data を使用して割り当てられます。ここで、data は値 1 のバイトです (受信されている USB データのバッファから値がデコードされているため)。参考になるかわかりませんが、念のため記しておきます。

2番目の変数が宣言されているメソッド内でそれらを比較したいのですが、元々は次のようにしました:

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

これはほとんどの場合機能しますが、2 つの値が一致しないために例外がスローされることがありますが、デバッガーでそれらをチェックすると、両方とも Request.GetData と等しくなります。これにより、変数は値ではなくオブジェクトへのポインターである可能性があると考えたので、使用してみました...

!request.Equals(currentRequest)

request.CompareTo(currentRequest)!=0

同様に、ほとんどの場合、これらは両方とも機能しますが、値がデバッガーでチェックされたときに両方とも Request.GetData であっても失敗することがあります。

私を本当に混乱させているのは、ほとんどの場合は機能しますが、たまに失敗することです-私はそれが機能するか、一貫して機能しないことを期待しています.

何か案は?

4

1 に答える 1

1

いいえ、変数が本当に型である場合、Requestそれは型であり、使用==はまったく問題ありません。

デバッガーが表示している内容が少しおかしいのではないかと思います。何が起こっているのかを示すために、例外にrequestと の両方を含めることをお勧めしますcurrentRequest

于 2011-09-28T11:56:57.197 に答える