9

重複の可能性:
列挙型を別の種類の列挙型に変換する

異なる型の列挙型間でキャストする場合、ある型から別の型に直接キャストすることは可能ですか?

LicenseTypes type;
TypeOfLicense type2;

type2 = (TypeOfLicense)type;

または、最初に列挙型を int にキャストする必要がありますか? コンパイラは文句を言いませんが、実行時にファンキーなキャスト例外が発生しないようにしたいのです。

これは奇妙に思えるかもしれませんが、両方の列挙型の構造と値は同じです。この場合、タイプ名のみが異なります。

4

3 に答える 3

9

重複していますが、私もフラグを立てました。基になる型が であるため、単純なキャストをint実行できます。次のことができます。

LicenseTypes type = (LicenseTypes)TypeOfLicense.value3;

ここでtypeは値「0」を保持します。

あなたが持っていると仮定します:

public enum LicenseTypes 
{
    value1,
    value2,
}
public enum TypeOfLicense
{
    value3, 
    value4,
    value5
}

ただし、キャストしようとするとTypeOfLicence.value5、変数typeは int 値を保持します2

LicenseTypes type = (LicenseTypes)TypeOfLicense.value5;

列挙型間の変換用の拡張メソッドの作成については、このリンクを参照することもできます。(同様の質問の受け入れられた答えです)

于 2012-10-04T04:48:34.523 に答える
3

いいえ、しかし、いくつかの仮定を行うことでこれを行うことができます...

LicenseTypes type = LicenseTypes.Type1;
TypeOfLicense type2 = TypeOfLicense.Type2;

type2 = (TypeOfLicense)(int)type;

...そしてそれらの仮定はこれです。と の両方が値のベースであるLicenseTypesと仮定する必要があります。また、基礎となる値を相互にキャストすることは、ビジネスの観点から相互に関連していると想定する必要があります (ただし、技術的な観点からは、実際にはそうではありません)。TypeOfLicenseint

これは他の基本型でも機能することに注意してください。変換を使用して異なる型間でキャストできるようにする、より複雑な変換を構築することができます。

于 2012-10-04T04:45:04.567 に答える
0

どのようにしても、それは別の変数への整数の代入にすぎません。列挙型は内部的に整数として扱われるため、違いはありません。

于 2012-10-04T04:48:19.973 に答える