Rik*_*ter 5 c# string generics parsing types
我有一个自定义类,它依赖于传递类型T来传递.我只知道字符串形式是什么类型,因为它是如何被发送的.我一直在寻找,但似乎无法找到我需要的确切内容.我可以将字符串值解析为类型,但我需要将其解析为...某些东西,我可以作为泛型参数传递.
我已经改写了我的问题,因此:
// Classes structure
namespace Mynamespace
{
public interface IRequest
{
}
public interface IHandler<T> where T : IRequest
{
void Handle(T item);
}
public class MyRequest : IRequest
{
}
public class MyHandler : IHandler<MyRequest>
{
void Handle(MyRequest item)
{
}
}
}
// The info I get, and I know typeString is a IRequest
string typeString = "My";
object requestItem = [insert xml parsing here];
// I then create a handler, to handle the request
Type typeHandler = Type.GetType("Mynamespace." + typeString + "Handler");
var handler = Activator.CreateInstance(typeHandler);
Type typeRequest = Type.GetType("Mynamespace." + typeString + "Request");
// what I want to do:
handler.Handle(requestItem);
Run Code Online (Sandbox Code Playgroud)
我不能这样做因为handler和requestItem只是对象所以我需要将'handler'解析为'typeHandler',并将requestItem解析为'typeRequest'
编辑:我想通了,我用InvokeMember来访问它.:)
typeHandler.InvokeMember("Handle", BindingFlags.InvokeMethod, null, handler, new[] { requestItem });
Run Code Online (Sandbox Code Playgroud)
你需要Type.MakeGenericType:
Type typeArgument = Type.GetType(string.Format("Mynamespace.{0}", typeString));
Type template = typeof(MyClass<>);
Type genericType = template.MakeGenericType(typeArgument);
object instance = Activator.CreateInstance(genericType);
Run Code Online (Sandbox Code Playgroud)
请注意,您不能将其转换为特定的,MyClass<T>因为您不知道T- 但它将在执行时成为正确类的实例.
我想通了,我使用 InvokeMember 来访问它。:)
typeHandler.InvokeMember("Handle", BindingFlags.InvokeMethod, null, handler, new[] { requestItem });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9020 次 |
| 最近记录: |