私はこのようないくつかのチェックを行う必要があります。クラスがC#で変数として与えられた型のインスタンスであるかどうかをチェックする方法は?
if(thisInstance is ThatClass || thisInstance is ThatOtherClass)
私は実際にこれらの多くを行うために必要とされることはありませんので、それは上記のように、私は単にそれを書くことができますが、私は思いますそれでもやはりもっときちんとしたやり方でこれをやることを好む。このように:
Type[] arrayOfClasses = new Type[] { typeof(ThatClass), typeof(ThatOtherClass))}
if(isOfAnyType(thisInstance, arrayOfClasses))
しかし、私はそれを動作させることはできません。
thisInstance.GetType()
と
typeof(ThatClass)
の文字列表現が同じになるにもかかわらず、いくつかの理由について、
thisInstance.GetType().IsInstanceOfType(type)
はまだ常にfalseになります。
違いがある場合、これはUnityプロジェクトです。したがって、同等の項目(thisInstance.GetType()。GetType()など)に対してさらにGetType()を呼び出すと、結果は常にSystem.MonoTypeになります。この場合、IsInstanceOfTypeは常にtrueを返しますが、もちろん役に立ちません。
比較が失敗する理由、またはそれを動作させる方法については、または、私はただ単にあきらめて、必要に応じて "ThisInstance is ThatClass"を使用するだけですか?
元のコードは、どのような意味でも「不揃い」とはみなされません。それは非常に簡単なようです。なぜあなたは、言語の演算子を使用することができます反射を使用する?より良い質問は、「私のコードを再構成して、チェックが不要なのですか?」です。 –
まあ、これらの2つのクラスだけでは、特に不安定ではありませんが、設定が容易ではなく、より多くのクラスでは私の見解ではちょっと奇抜です。 – Jeffed
確かに、問題は次のようなものです:なぜあなたは物事のタイプのランタイムチェックをたくさんしなければならないプログラムを持っていますか?ランタイムチェックの結果である複雑でないコードを書き留めようとするのではなく、それらを完全に排除しようとします。 –