如何从对象类型 属性 设置方法的 T?
How to set the T of a method from object type property?
我希望能够使用 class 中的 T 类型变量,将类型保存为属性。我该如何动态地做到这一点?
我得到了这个类型:
public class Mapper
{
public string Key {get; set;}
public Type RequestType {get; set;}
public Type ResponseType {get; set;}
public Mapper(string key)
{
RequestType = typeof(SomeType);
ResponseType = typeof(SomeType2);
}
}
我得到了这个class
public class Handler<T> where T: new ()
{
// some properties and methods
}
我想做以下事情:
var mapper = new Mapper("Key1");
Hanadler<mapper.RequestType> handler = new Handler<mapper.RequestType>();
我经常遇到的问题是:
'mapper' is a variable but is used like a type
我试图在整个网络上寻找这样的例子,但我什至不确定如何描述它。
请注意它与重复提案不同,因为这与创建对象的新实例有关,而另一个答案是关于生成通用方法。重复的提议实际上有助于在这个答案之后使用动态创建的新实例继续。
任何帮助将不胜感激
因为你要在泛型位置使用Type,而且你要在编译时确定你的目标类型;
Hanadler<TargetType> handler = new Handler<TargetType>();
如果要在Runtime中确定目标泛型类型,就得用到反射。
你的情况:
var d1 = typeof(Handler<>);
Type[] typeArgs = { mapper.RequestType };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
您可以在此处查看 MSDN 文档:
https://msdn.microsoft.com/en-us/library/system.type.makegenerictype(v=vs.110).aspx
我希望能够使用 class 中的 T 类型变量,将类型保存为属性。我该如何动态地做到这一点?
我得到了这个类型:
public class Mapper
{
public string Key {get; set;}
public Type RequestType {get; set;}
public Type ResponseType {get; set;}
public Mapper(string key)
{
RequestType = typeof(SomeType);
ResponseType = typeof(SomeType2);
}
}
我得到了这个class
public class Handler<T> where T: new ()
{
// some properties and methods
}
我想做以下事情:
var mapper = new Mapper("Key1");
Hanadler<mapper.RequestType> handler = new Handler<mapper.RequestType>();
我经常遇到的问题是:
'mapper' is a variable but is used like a type
我试图在整个网络上寻找这样的例子,但我什至不确定如何描述它。
请注意它与重复提案不同,因为这与创建对象的新实例有关,而另一个答案是关于生成通用方法。重复的提议实际上有助于在这个答案之后使用动态创建的新实例继续。
任何帮助将不胜感激
因为你要在泛型位置使用Type,而且你要在编译时确定你的目标类型;
Hanadler<TargetType> handler = new Handler<TargetType>();
如果要在Runtime中确定目标泛型类型,就得用到反射。 你的情况:
var d1 = typeof(Handler<>);
Type[] typeArgs = { mapper.RequestType };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
您可以在此处查看 MSDN 文档:
https://msdn.microsoft.com/en-us/library/system.type.makegenerictype(v=vs.110).aspx