C#で列挙型からint値を取得する


1825

Questions(複数)というクラスがあります。このクラスには、Question次のような(singular)という列挙型があります。

public enum Question
{
    Role = 2,
    ProjectFunding = 3,
    TotalEmployee = 4,
    NumberOfServers = 5,
    TopBusinessConcern = 6
}

ではQuestionsクラス私はget(int foo)返す関数Questionsそのためのオブジェクトをfoo。列挙型から整数値を取得する簡単な方法はありQuestions.Get(Question.Role)ますか?これで私はこのようなことをすることができますか?



11
私はパーティーに遅れていることを知っていますが、メソッド内でキャストを行うようにget(int foo)定義できるようにメソッドを定義する代わりにget(Question foo)、次のようにメソッドを呼び出すことができますQuestions.Get(Question.Role)
Joe

回答:


2354

列挙型をキャストするだけです。

int something = (int) Question.Role;

列挙型のデフォルトの基本型はであるため、上記は実際に見られる列挙型の大部分に対して機能しますint

ただし、cecilphillipが指摘しているように、列挙型にはさまざまな基本型があります。列挙型は次のように宣言されている場合uintlongまたはulong、それが列挙型の型にキャストする必要があります。たとえば

enum StarsInMilkyWay:long {Sun = 1, V645Centauri = 2 .. Wolf424B = 2147483649};

あなたは使うべきです

long something = (long)StarsInMilkyWay.Wolf424B;

23
@ハリーそれは真実ではありません。キャストせずに列挙型を作成できます。必須ではありません。私は特別な場合にのみ番号を割り当てますが、ほとんどの場合、デフォルト値のままにします。しかし、あなたはそうすることができenum Test { Item = 1 }、それ1 == (int)Test.Itemが等しいことを見ることができます。
Jaider

33
@ジェイダー(int)Test.Itemそれはキャストです!()は明示的なキャスト演算子です。
シンシアV 2012

48
@Sinthia V彼はキャストせずにそれを作成できると言った、それは正しい
Paul Ridgway

7
の基になる型enum Questionがなかったintが、longこのキャストはRole整数値を切り捨てる場合!
Quaylar 2013年

1
Enumパラメーターとして受け入れると、取得できる整数値の数が固定されていることがわかります。一方、単にを取る場合はint、それがint許容値内にあるかどうかを検証する必要があるため、コードが複雑になります。`` `public void MyMethod(int x){// xで何かをする} public void MyMethod(Enum x){this.MyMethod((int)x);のように、いつでも署名をオーバーライドできます。} `` ``
ペルセバス

307

列挙型は、任意の整数型(することができますのでbyteintshort、など)、列挙型の基礎となる整数値を取得するために、より堅牢な方法は、を利用することだろうGetTypeCodeと一緒にメソッドConvertクラス:

enum Sides {
    Left, Right, Top, Bottom
}
Sides side = Sides.Bottom;

object val = Convert.ChangeType(side, side.GetTypeCode());
Console.WriteLine(val);

これは、基になる整数型に関係なく機能するはずです。


32
この手法は、T:enum(実際にはT:struct、IConvertibleですが、それは別の話です)のジェネリック型を扱うときに私に価値があることを証明しました。
aboy021

1
これをどのように変更して、sideの16進値を出力しますか?この例は、10進数値を示しています。問題はそれvarがタイプobjectであるため、ボックスを解除する必要があり、私が望むよりも面倒になります。
Mark Lakata、2012年

2
私はあなたに例を変更すべきだと思うあなたの例では、常になります。object val = Convert...etcvarobject
2013年

2
@TimAbell私が本当に言えることは、動的にコンパイルされたaspxページ(.csファイルをライブサーバーに展開する必要がある場所)が整数を各値に異なる方法で割り当てていることを発見したということです。つまり、シリアル化されたオブジェクトが1台のマシンで、別のマシンで異なる値でデシリアライズされ、事実上破損していました(何時間もの混乱を引き起こしています)。私たちはMSでそれを提起し、異なるフレームワークバージョンでビルドされたときに自動生成された整数が同じであることが保証されなかったと彼らが言ったことを思い出しているようです。
NickG 2015年

4
@TimAbell別の機会に、開発者が古くなった/使用されていないEnum値を削除すると、シーケンス内の他のすべての値が1つなくなります。そのため、現在のコーディング標準ではIDを常に明示的に指定する必要があります。そうしないと、コードを追加/削除したり、自動フォーマット(たとえば、アルファベット順に並べ替え)したりすると、すべての値が変更され、データが破損します。すべてのEnum整数を明示的に指定することを強くお勧めします。外部(データベース)に保存された値と相関する場合、これは非常に重要です。
NickG 2015年

199

それをパブリック定数を持つ静的クラスとして宣言します。

public static class Question
{
    public const int Role = 2;
    public const int ProjectFunding = 3;
    public const int TotalEmployee = 4;
    public const int NumberOfServers = 5;
    public const int TopBusinessConcern = 6;
}

そして、あなたはそれをとして参照することができQuestion.Role、それは常にintあなたがそれをあなたが定義したものに評価します。


31
static readonly int定数がハード値にコンパイルされるので、私は使用します。stackoverflow.com/a/755693/492を
CADが

96
このソリューションは、厳密に型指定された列挙型の真の利点を実際には提供しません。たとえば、GameState-enum-parameterを特定のメソッドに渡すだけの場合、コンパイラーはint変数をパラメーターとして渡すことができません。
thgc 2014

12
@CADBlokeこれは、使用する理由でconstあり、static readonly比較するたびにstatic readonly変数の値を取得するメソッド呼び出しを行っているのに対し、ではconst2つの値の型を直接比較しているためです。
blockloop 2014

3
@ brettof86はい、constの方が高速です。コンパイルの制限が問題にならない場合は、問題ありません。
CADブローク2014

2
@Zack私はそれについて十分に説明しませんでした。compilation limitationつまり、値はコンパイル時にハードコードされているため、その値を変更すると、それを使用するすべてのアセンブリを再コンパイルする必要があります。値を変更すると広範囲に影響するため、使用方法については同意します。
CADは、2015

87
Question question = Question.Role;
int value = (int) question;

結果はになりvalue == 2ます。


34
一時変数の質問は不要です。
紀州

1
したがって、このQuestions.Get(Convert.ToInt16(Question.Applications))のようなもの
jim

6
どちらの方向にも簡単にキャストできます。注意すべき唯一のことは、列挙型は何も強制しないことです(列挙型の値は288になる可能性がありますが、その番号の質問は存在しません)
Marc Gravell

@jim:いいえ、値をキャストするだけです:Questions.Get((int)Question.Applications);
Guffa

1
@ギシューあなたはそれが...疑わしいと言えるでしょう。;)
Felix D.17年

79

関連するメモとして、intから値を取得する場合はSystem.Enum、次のようになりeます。

Enum e = Question.Role;

以下を使用できます。

int i = Convert.ToInt32(e);
int i = (int)(object)e;
int i = (int)Enum.Parse(e.GetType(), e.ToString());
int i = (int)Enum.ToObject(e.GetType(), e);

最後の2つは醜いです。私は最初のものを好みます。


1
2つ目は最速ですが。
ヨハンB

1
Minecraftの改造でMixinsを使用することに慣れている人として、2番目は明らかな勝者のようです。
Sollace

40

それはあなたが考えるよりも簡単です-列挙型はすでにintです。思い出す必要があるだけです:

int y = (int)Question.Role;
Console.WriteLine(y); // Prints 2

15
Nitpick:この列挙型はすでにintです。他の列挙型は異なるタイプである可能性があります-「enum SmallEnum:byte {A、B、C}」を試してください
mqp

9
絶対に本当。C#リファレンス:「すべての列挙型には、char以外の任意の整数型である基本型があります。」
Michael Petrotta

33

例:

public Enum EmpNo
{
    Raj = 1,
    Rahul,
    Priyanka
}

そして、列挙型の値を取得するためのコードの後ろで:

int setempNo = (int)EmpNo.Raj; // This will give setempNo = 1

または

int setempNo = (int)EmpNo.Rahul; // This will give setempNo = 2

列挙型は1ずつ増加し、開始値を設定できます。開始値を設定しない場合、最初は0として割り当てられます。


6
これは実際にコンパイルされますか?
Peter Mortensen

ラージであるものは、ラーフルまたはプリヤンカになることもできますか?値は競合し、一意になるように2倍にする必要があります(例:0、1、2、4、8など)。これは列挙型に関する私の中心的な懸念事項です。
ティモシーゴンザレス

@TimothyGonzalezは、値を明示的に指定しない場合、実際には列挙型は1を数えます;)
derHugo

数値が10を基数とするか2を基数とするかによって異なる@derHugo
Timothy Gonzalez

@TimothyGonzalezも想定してあまりありません...私は、デフォルトでは、彼らは単にカウントアップはないことを指摘1してint、あなたが明示的に定義する以外
derHugo

28

私は最近、保護されたコンストラクターと事前定義された静的インスタンスを持つクラスを使用する代わりに、コードで列挙型を使用しないように変換しました(Roelof- C#による有効な列挙値の確認-Futureproofメソッド)。

そのことを踏まえて、以下は私がこの問題にどのように取り組むかです(暗黙的なからの変換を含むint)。

public class Question
{
    // Attributes
    protected int index;
    protected string name;
    // Go with a dictionary to enforce unique index
    //protected static readonly ICollection<Question> values = new Collection<Question>();
    protected static readonly IDictionary<int,Question> values = new Dictionary<int,Question>();

    // Define the "enum" values
    public static readonly Question Role = new Question(2,"Role");
    public static readonly Question ProjectFunding = new Question(3, "Project Funding");
    public static readonly Question TotalEmployee = new Question(4, "Total Employee");
    public static readonly Question NumberOfServers = new Question(5, "Number of Servers");
    public static readonly Question TopBusinessConcern = new Question(6, "Top Business Concern");

    // Constructors
    protected Question(int index, string name)
    {
        this.index = index;
        this.name = name;
        values.Add(index, this);
    }

    // Easy int conversion
    public static implicit operator int(Question question) =>
        question.index; //nb: if question is null this will return a null pointer exception

    public static implicit operator Question(int index) =>        
        values.TryGetValue(index, out var question) ? question : null;

    // Easy string conversion (also update ToString for the same effect)
    public override string ToString() =>
        this.name;

    public static implicit operator string(Question question) =>
        question?.ToString();

    public static implicit operator Question(string name) =>
        name == null ? null : values.Values.FirstOrDefault(item => name.Equals(item.name, StringComparison.CurrentCultureIgnoreCase));


    // If you specifically want a Get(int x) function (though not required given the implicit converstion)
    public Question Get(int foo) =>
        foo; //(implicit conversion will take care of the conversion for you)
}

このアプローチの利点は、列挙型からすべてのものを取得できることですが、コードははるかに柔軟になりました。そのため、の値に基づいてさまざまなアクションを実行する必要がある場合はQuestion、ロジックをQuestionそれ自体に含めることができます(つまり、優先OOに各シナリオに取り組むためにコード全体に多くのケースステートメントを配置するのではなく、


注意:C#6の機能を利用するために更新された2018-04-27の回答。つまり、宣言式とラムダ式本体の定義です。元のコードの変更履歴を参照してください。これには、定義を少し冗長にする利点があります。これは、この回答のアプローチに関する主な不満の1つでした。


2
それは、明示的なキャストとそれを回避するために記述しなければならないコードとの間のトレードオフだと思います。それでもそれほど長くはならなかったらいいのにと思っても、実装は大好きです。+1
Lankymart 2013

3
これに似た構造のクラスをいくつか使用しました。「後でバカにしないでください」という方法論を試そうとすると、不思議に働くことがわかりました。
James Haug、2016

20

変数に格納されているenum値の整数を取得したい場合は、型でQuestion、たとえばメソッドで使用するには、これを単純に行うことができます。

enum Talen
{
    Engels = 1, Italiaans = 2, Portugees = 3, Nederlands = 4, Duits = 5, Dens = 6
}

Talen Geselecteerd;    

public void Form1()
{
    InitializeComponent()
    Geselecteerd = Talen.Nederlands;
}

// You can use the Enum type as a parameter, so any enumeration from any enumerator can be used as parameter
void VeranderenTitel(Enum e)
{
    this.Text = Convert.ToInt32(e).ToString();
}

変数Geselecteerdがなので、ウィンドウのタイトルが4に変更されますTalen.Nederlands。に変更してTalen.Portugeesメソッドを再度呼び出すと、テキストは3に変わります。


3
オランダ語でのコーディング。まあ。
WiseStrawberry

残念ながら、このアプローチは使用するほどパフォーマンスが低下します。私のコードで試してみましたが、時間が経つにつれ、CPU使用率が低下し、アプリケーションの速度が徐々に低下しました。これは、スレッドが何かを待っていることを意味していました-おそらく、ToInt32()へのenumパラメータのボックス化が原因で、ある種のガベージコレクションを想定しています。単純なint.Parse()に切り替えることで、このパフォーマンスの低下を完全に排除することができ、コードの実行時間に関係なく、パフォーマンスは同じままでした。
グレッグ

16

列挙値が存在することを確認してから解析するには、次の操作も実行できます。

// Fake Day of Week
string strDOWFake = "SuperDay";

// Real Day of Week
string strDOWReal = "Friday";

// Will hold which ever is the real DOW.
DayOfWeek enmDOW;

// See if fake DOW is defined in the DayOfWeek enumeration.
if (Enum.IsDefined(typeof(DayOfWeek), strDOWFake))
{
    // This will never be reached since "SuperDay"
    // doesn't exist in the DayOfWeek enumeration.
    enmDOW = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), strDOWFake);
}
// See if real DOW is defined in the DayOfWeek enumeration.
else if (Enum.IsDefined(typeof(DayOfWeek), strDOWReal))
{
    // This will parse the string into it's corresponding DOW enum object.
    enmDOW = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), strDOWReal);
}

// Can now use the DOW enum object.
Console.Write("Today is " + enmDOW.ToString() + ".");

14

多分それを逃したかもしれませんが、誰かが単純な一般的な拡張メソッドを試しましたか?

これは私にとってはうまくいきます。この方法でAPIの型キャストを回避できますが、最終的には型の変更操作が発生します。これは、RoslynをプログラミングしてコンパイラーにGetValue <T>メソッドを作成させる良い例です。

    public static void Main()
    {
        int test = MyCSharpWrapperMethod(TestEnum.Test1);

        Debug.Assert(test == 1);
    }

    public static int MyCSharpWrapperMethod(TestEnum customFlag)
    {
        return MyCPlusPlusMethod(customFlag.GetValue<int>());
    }

    public static int MyCPlusPlusMethod(int customFlag)
    {
        // Pretend you made a PInvoke or COM+ call to C++ method that require an integer
        return customFlag;
    }

    public enum TestEnum
    {
        Test1 = 1,
        Test2 = 2,
        Test3 = 3
    }
}

public static class EnumExtensions
{
    public static T GetValue<T>(this Enum enumeration)
    {
        T result = default(T);

        try
        {
            result = (T)Convert.ChangeType(enumeration, typeof(T));
        }
        catch (Exception ex)
        {
            Debug.Assert(false);
            Debug.WriteLine(ex);
        }

        return result;
    }
}

おそらく(int)customFlagを実行すると、全体の入力が少なくなり、多かれ少なかれ同じことをするからでしょうか?
Tim Keating

「たぶん私はそれを逃したが、誰もが簡単な、一般的な試みた拡張メソッドを?」SixOThreeは 「代わりに拡張メソッドを使用する」述べBronekは「定義した列挙型に拡張メソッドを実装することでこれを行うことができる述べました
Peter Mortensen

13

それを行うもう1つの方法:

Console.WriteLine("Name: {0}, Value: {0:D}", Question.Role);

結果は次のようになります。

Name: Role, Value: 2

12
public enum QuestionType
{
    Role = 2,
    ProjectFunding = 3,
    TotalEmployee = 4,
    NumberOfServers = 5,
    TopBusinessConcern = 6
}

...細かい宣言です。

次のように結果をintにキャストする必要があります。

int Question = (int)QuestionType.Role

それ以外の場合、タイプはまだQuestionTypeです。

このレベルの厳密さはC#の方法です。

代わりに、クラス宣言を使用する方法もあります。

public class QuestionType
{
    public static int Role = 2,
    public static int ProjectFunding = 3,
    public static int TotalEmployee = 4,
    public static int NumberOfServers = 5,
    public static int TopBusinessConcern = 6
}

宣言するのはエレガントではありませんが、コードでキャストする必要はありません。

int Question = QuestionType.Role

あるいは、多くの分野でこの種の期待に応えるVisual Basicの方が快適だと感じるかもしれません。


11
int number = Question.Role.GetHashCode();

number値が必要です2


GetHashCodeはEnum共通マスクから値を取得する1つの方法
ThanhLD

これはのための唯一の「合法的」であることに注意してくださいbool*、 、byteushortintおよびuint**。他のタイプのGetHashCodeは値を変更します。(* 1/0、**もちろんintにキャストされます)。しかし、それはあなた自身のプライベートコードでない限り、全体としてこれをしないでください。
AnorZaken

10

これを行うには、定義した列挙型に拡張メソッドを実装します。

public static class MyExtensions
{
    public static int getNumberValue(this Question questionThis)
    {
        return (int)questionThis;
    }
}

これにより、現在の列挙値のint値を簡単に取得できます。

Question question = Question.Role;
int value = question.getNumberValue();

または

int value = Question.Role.getNumberValue();

5
Bronek、あなたがしたことは、実際には書くのに時間がかかる(一般的ではない)拡張メソッドを介して、有益でない構文を作成することです。テトラニュートロンによる元のソリューションよりも優れているかどうかはわかりません。これをチャットにしないでください。stackoverflowのヘルプは常に歓迎されており、ここにいる全員がサポートします。私のコメントを建設的な批評としてください。
Benjamin Gruenbaum 2012

2
ベンジャミン、まず第一に、なぜ私のコメントを削除したのですか?私はあなたの決定を理解していません-おそらくコミュニティを介して他の誰かが私のコメントに同意するかもしれません。拡張方法はIntelliSenseによって提案されています。したがって、あなたの決定は公平で代表的なものではないと思います。Stackにも同様の答えがたくさんあり、それは問題ありません。これらの否定的な点は見つけるのを難しくします。ほとんどの場合、それは正しく、コピーではありません。
Bronek

3
@Bronekあなたが私にpingを送信しない場合、私はあなたが返信したことを示しません。私はあなたのコメントを削除しませんでした。おそらくmodがやって来て、それを削除しました-モデレーターの注意を喚起するためにフラグを立てて、理由を尋ねるか、それでももっと良いです- メタスタックオーバーフローで尋ねてください。プログラミングの観点からあなたの解決策について私は完全に私の意見を持っています-これは、コメントを始めるためのものであり、個人的に考える必要はありません。
Benjamin Gruenbaum 2013

8

代わりに拡張メソッドを使用してください:

public static class ExtensionMethods
{
    public static int IntValue(this Enum argEnum)
    {
        return Convert.ToInt32(argEnum);
    }
}

そして、使用法は少しきれいです:

var intValue = Question.Role.IntValue();

7
public enum Suit : int
{
    Spades = 0,
    Hearts = 1,
    Clubs = 2,
    Diamonds = 3
}

Console.WriteLine((int)(Suit)Enum.Parse(typeof(Suit), "Clubs"));

// From int
Console.WriteLine((Suit)1);

// From a number you can also
Console.WriteLine((Suit)Enum.ToObject(typeof(Suit), 1));

if (typeof(Suit).IsEnumDefined("Spades"))
{
    var res = (int)(Suit)Enum.Parse(typeof(Suit), "Spades");
    Console.Out.WriteLine("{0}", res);
}

スーツ -「10.(カードゲーム)色や特定のエンブレム(スペード、ハート、ダイヤ、伝統的なアングロ、ヒスパニック、フランスのトランプのクラブなど)で区別されるカードパックの各セット。」
Peter Mortensen

サンプルコードの説明が適切です(ここではコメントでなく、回答を編集してください)。
Peter Mortensen

ゼロは通常、列挙型の未設定/不明な状態のために予約されており、そのように定義するのは珍しい
Chad Grant

6

使用する:

Question question = Question.Role;
int value = question.GetHashCode();

結果はになりvalue == 2ます。

これは、列挙型が内に収まる場合にのみ当てはまりますint


1
これは、enum intがもちろんGetHashCode整数の内部に収まる場合にのみ当てはまります。
RB。

5

enumは複数のプリミティブ型で宣言できるため、任意のenum型をキャストする一般的な拡張メソッドが役立ちます。

enum Box
{
    HEIGHT,
    WIDTH,
    DEPTH
}

public static void UseEnum()
{
    int height = Box.HEIGHT.GetEnumValue<int>();
    int width = Box.WIDTH.GetEnumValue<int>();
    int depth = Box.DEPTH.GetEnumValue<int>();
}

public static T GetEnumValue<T>(this object e) => (T)e;

4

以下は拡張メソッドです

public static string ToEnumString<TEnum>(this int enumValue)
{
    var enumString = enumValue.ToString();
    if (Enum.IsDefined(typeof(TEnum), enumValue))
    {
        enumString = ((TEnum) Enum.ToObject(typeof (TEnum), enumValue)).ToString();
    }
    return enumString;
}

4

intまたはより小さい列挙型を使用した私のお気に入りのハック:

GetHashCode();

列挙型

public enum Test
{
    Min = Int32.MinValue,
    One = 1,
    Max = Int32.MaxValue,
}

この、

var values = Enum.GetValues(typeof(Test));

foreach (var val in values)
{
    Console.WriteLine(val.GetHashCode());
    Console.WriteLine(((int)val));
    Console.WriteLine(val);
}

出力

one
1
1
max
2147483647
2147483647
min
-2147483648
-2147483648

免責事項:

longに基づく列挙型では機能しません。


3

私が考えることができる最も簡単な解決策は、Get(int)このようなメソッドをオーバーロードすることです:

[modifiers] Questions Get(Question q)
{
    return Get((int)q);
}

ここで、[modifiers]一般的にGet(int)メソッドと同じです。Questionsクラスを編集できない場合、または何らかの理由で編集したくない場合は、拡張機能を記述してメソッドをオーバーロードできます。

public static class Extensions
{
    public static Questions Get(this Questions qs, Question q)
    {
        return qs.Get((int)q);
    }
}

3

私が「列挙から「int」値を取得する」ことを提案したい例は、

public enum Sample
{
    Book = 1, 
    Pen = 2, 
    Pencil = 3
}

int answer = (int)Sample.Book;

これで答えは1になります。



2

enumをintに変換する代わりにこれを試してください:

public static class ReturnType
{
    public static readonly int Success = 1;
    public static readonly int Duplicate = 2;
    public static readonly int Error = -1;        
}

2

Visual Basicでは、次のようになります。

Public Enum Question
    Role = 2
    ProjectFunding = 3
    TotalEmployee = 4
    NumberOfServers = 5
    TopBusinessConcern = 6
End Enum

Private value As Integer = CInt(Question.Role)

3
問題はC#です。
Ctrl S、

2
タイトルには、「C#の列挙型からint値を取得」と書かれています。
Peter Mortensen

0

現在の言語機能を含むこの拡張メソッドを思いつきました。動的を使用することで、これをジェネリックメソッドにして、呼び出しをよりシンプルで一貫性のあるものにするタイプを指定する必要はありません。

public static class EnumEx
{
    public static dynamic Value(this Enum e)
    {
        switch (e.GetTypeCode())
        {
            case TypeCode.Byte:
            {
                return (byte) (IConvertible) e;
            }

            case TypeCode.Int16:
            {
                return (short) (IConvertible) e;
            }

            case TypeCode.Int32:
            {
                return (int) (IConvertible) e;
            }

            case TypeCode.Int64:
            {
                return (long) (IConvertible) e;
            }

            case TypeCode.UInt16:
            {
                return (ushort) (IConvertible) e;
            }

            case TypeCode.UInt32:
            {
                return (uint) (IConvertible) e;
            }

            case TypeCode.UInt64:
            {
                return (ulong) (IConvertible) e;
            }

            case TypeCode.SByte:
            {
                return (sbyte) (IConvertible) e;
            }
        }

        return 0;
    }

いいえ、すべてを1行で実行できますConvert.Changetype(e、e.GetTypeCode())、オブジェクトを取得します。ダイナミクスや拡張メソッドは必要ありません
Chad Grant

Convertの使用に同意しません。キャストを使うだけの方が簡単でしょう。私の意図は、キャストを使用せずに列挙型をその値に変換できるようにすることでした。これにより、関連するすべてのキャストを変更する必要がない列挙型の変更が可能になりますが、これはいつ発生しますか?拡張メソッドは正しく動作します。しかし、動的であるため、コンパイラーは(ステートメント全体に対して)タイプチェックを実行できません。つまり、実行時にタイプチェックが行われるため、適切な解決策ではありません。キャストに戻ると思います。
ジェフ

1
私はそれをキャストで使用するとは言いませんでした。このコードは無意味で何も実行しないため、実際には問題がさらに悪化します。このソリューションを削除することをお勧めします
チャドグラント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.