gpt4 book ai didi

c# - 来自字符串值的通用类型

转载 作者:太空狗 更新时间:2023-10-29 22:17:00 26 4
gpt4 key购买 nike

我有一个自定义类,它依赖于要传递的通用类型 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);

我不能那样做,因为 handler 和 requestItem 只是对象所以我需要将 'handler' 解析为 'typeHandler',并将 requestItem 解析为 'typeRequest'

编辑:我想通了,我使用 InvokeMember 来访问它。 :)

typeHandler.InvokeMember("Handle", BindingFlags.InvokeMethod, null, handler, new[] { requestItem });

最佳答案

你需要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);

请注意,您不能将其转换为特定的 MyClass<T>因为你不知道T - 但在执行时它将是正确类的一个实例。

关于c# - 来自字符串值的通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7450958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com