2016-04-27 15 views
0

私は2つのジェネリックスをとる関数を持っています<C, M>。私はtypeof(C) != typeof(M)を強制したいと思います、これは可能ですか?ジェネリック型の型が同じでないようにしますか?ジェネリックは指定された型のサブタイプにしかなりませんか?

私はMSDN page for type constraintsを読んでおり、「肯定」(where C: <class>|<interface>|<generic>)の場合のみ拘束できますが、否定の場合(where C: !<class>|!<interface>|<!<generic>)は拘束できません。

私のもう一つの解決策は、ジェネリック型を特定の型のサブクラスに強制することですが、その型自体は強制しないでください。私はこれが可能であるとは思わない。

答えて

3

いいえ - C#でもCLRでもそういう概念はありません。

出典:https://stackoverflow.com/a/8727539

そのためのコンパイル時のチェックはありません。しかし、あなたはまだType.Equals(Type)Type.IsAssignableFrom(Type)でランタイムチェックを行うことができます。

+3

Jon Skeetが話しました。 – KDecker