2016-11-22 17 views
1

2つの別々の列挙型(異なるスクリプトから)の(int)を比較することが可能かどうか疑問に思っていましたか?C#/ Unityの列挙型の値を比較していますか?

if((int)newMiner.minerType == (int)resourceType) 
     { 
      Debug.Log("Resource Holder Accepts Miner"); 
     } 

newMinerは、私が比較しようとしている列挙型を持っている他のスクリプトで、resourcetypeのは、私はそれを比較しようとしている地元の列挙型である一方、minerTypeは1列挙型です:

私は現在しようとしています。

私は現在、エラーを返さないが、常にtrueを返します。どのように動作するかについての情報は非常に高く評価されます:)

+0

newMinerの外観は何ですか?また、resourceType列挙型はどのように見えますか?これらの両方を投稿する必要があります。 – Programmer

+0

enum宣言を貼り付けることはできますか?私は、minerTypeとresourceTypeの下にあるものは、実際には互いに対応していないと考えています。 –

+2

理論的には、はい、 'Enum'をintにキャストして比較することができます。しかし、 'Enum'は' [Flags] '(一度に複数の値を考える)を使うこともできます。これに加えて、各「Enum」は数値的に一致する必要があります。また、ブレークポイントを設定して、両方の整数を取得してみてください。 – Zer0

答えて

2

これはできません。

公開されている列挙型は1つだけです!両方の場所で同じものを使用してください。

3

あなたはif (car == house)でそれらを直接比較することができ、あなたが

Car car = Car.Window; 
House house = House.Window; 

でそれらのインスタンスを持っているのは、次の2つのenum

enum Car { Window, Door, Light, Gate, Bath } 

enum House { Window, Door, Light, Bath, Gate } 

があるとしましょうか?

NO

あなたはif ((int)car == (int)house)でそれらの値を比較することはできますか?

はいです。これはあなたがやろうとしているようです。

例1

if ((int)car == (int)house) 
    Debug.Log("Car Value matches House value"); 
else 
    Debug.Log("Car Value DOES NOT match House value"); 

出力:

カーバリューザ・両方の共有列挙Houseから列挙し、WindowCarからWindowための家の値

と一致します同じEnum値インデックス0です。

例2

Car car = Car.Light; 
House house = House.Light; 

if ((int)car == (int)house) 
    Debug.Log("Car Value matches House value"); 
else 
    Debug.Log("Car Value DOES NOT match House value"); 

出力:

カーバリューLightのでハウス値

は再び、それは両方の共有列挙Houseから列挙し、LightCarからだ一致し

同じ列挙型vアリューインデックスは 2です。

例3

Car car = Car.Gate; 
House house = House.Gate; 

if ((int)car == (int)house) 
    Debug.Log("Car Value matches House value"); 
else 
    Debug.Log("Car Value DOES NOT match House value"); 

出力:

カー値が一致しないハウス値

サプライズ!驚き!ゲートとゲートはCarHouseの間で一致しません。 なぜですか?

Houseから列挙は4の値を有し、Car列挙からGateながらは3の値を有する。Gateため4!= 3

Enumをintにキャストすると、そのインデックス位置が取得されます。位置は配列のように0から始まります。たとえば、以下のEnum宣言コードは、索引の外観を示しています。 if文trueされるためには

enum Car { Window = 0, Door = 1, Light = 2, Gate = 3, Bath = 4 } 

、彼らの両方が、同じ位置になければなりません。彼らは別の位置にある場合falseを得るでしょう。 Enumをもう一度チェックして修正してください。

+1

列挙型メンバーの値が必ずしもそのインデックスではないことを除いて、優れた説明です(値が明示的に割り当てられていない場合、これはデフォルトでの値です)。もちろん、旗の列挙は、他の魚のまったくのケトルです。 – Cameron

+0

はい、はい、あなたは正しいです。私はこれをデフォルト値と仮定して書きました。フラグについては、はい、それは別のものですが、OPはFlagsを言及していないので、OPは2つの異なる列挙型の値を比較しようとしているだけです。 – Programmer

関連する問題