-1
object obj = new Customer();
Type Ty = obj.GetType();
Validator<Ty> cusValidator = valFactory.CreateValidator<Ty>();

ここでエラーを取得

出来ますか?

4

1 に答える 1

2

はい、そうです。ただし、コンパイル時の型チェックではありません。実行時の型Tyは、有効なコンパイル時の型引数ではありません。MakeGenericTypeコンパイル時チェックの安全性なしでメソッドを使用して、リフレクションで実行できます。

object obj = new Customer();
Type ty = obj.GetType();
MethodInfo validatorFactory = valFactory.GetType()
                               .GetMethod("CreateValidator")
                               .MakeGenericType(ty);
var cusValidator = validatorFactory.Invoke(valFactory, null);

ただし、次のようなものは入力できません。またはValidator<ty>を使用する必要があります。タイプがオブジェクトになっていることに注意してください。vardynamic

// true:
cusValidator.GetType() == typeof(object)

非ジェネリック Validator インターフェイスを導入してcusValidator、すべての (などの) クラスの基本クラスを挿入しCustomerて検証するメソッドの呼び出しを許可することができます。にキャストすることはできませんValidator<ty>

于 2013-04-05T12:06:42.193 に答える