2012-03-22 8 views
0

私はGeneric型を必要とするBaseクラスを持っています。これはEntityObjectかカスタムタイプの鉱山です。
は、私はどちらかのタイプに基本クラスを制約する方法を必要と私はまた、一般的には、特定の型であるかどうかを確認する方法が必要です。
私はif (T is EntityObject)if (typeof(T) is EntityObject)それどちらか私は、変数としてTを使用しています、またはtypeof(T)のために、私はそれは「与えられた型のものではありません」と言い得ます。複数の制約タイプまたはGenericのタイプを確認しますか?

答えて

2

あなたは使用することができます。

if (typeof(T) == typeof(EntityObject)) 

または

if (typeof(EntityObject).IsAssignableFrom(typeof(T))) 

の要件に応じて。

もちろん、これは実行時のチェックです。コンパイル時に "1つの..."という制約を設定することはできません。あなたのシナリオに応じて、1つの制約のないプライベートメソッド(publicメソッドから呼び出されるだけなので適切な型を持っていることがわかっています)を呼び出す2つの異なる名前付き制約付きパブリックメソッドを持つことが適切です。

+0

私が確認したい第二のタイプは、実際に基本クラスである場合には、このカバーはウィル? Tは実際には "MyObject"になりますが、私はMyObjectが継承する "MyBase"をチェックします。 –

+0

JamesP.Wright @ 'typeof演算(MyBase).IsAssignableFrom(typeof演算(T))' 'T 'は' MyBase'のサブクラスである場合はtrueを返す必要があります –

0

2つの無関係なタイプのために制約する方法はありません。一般的なタイプ(インターフェースのような)か、制約付きジェネリッククラスの2つのバージョンが必要です。 Tは拘束されないと仮定すると、

、あなたはTが特定の型であるかどうかをチェックするためにif (typeof(T).Equals(typeof(EntityObject))) { ... }を使用することができます。

関連する問題