当前位置: 首页 > 编程语言 > C#

字符串值的泛型类型分享

时间:2023-04-10 20:53:14 C#

字符串值的泛型类型我有一个自定义类,依赖于传递一个类型T来传递。我只知道字符串是什么类型,因为它是如何发送的。我一直在寻找,但似乎无法找到我真正需要的东西。我可以将字符串值解析为一种类型,但我需要将其解析为……我可以作为泛型参数传递的东西。我将问题重写如下://ClassesstructurenamespaceMynamespace{publicinterfaceIRequest{}publicinterfaceIHandlerwhereT:IRequest{voidHandle(Titem);}publicclassMyRequest:IRequest{}publicclassMyHandler:IHandler{voidHandle(MyRequestitem){}}}//我得到的信息,我知道typeString是一个IRequest字符串typeString="My";objectrequestItem=[在此处插入xml解析];//然后我创建一个处理程序来处理请求TypetypeHandler=Type.GetType("Mynamespace."+typeString+"Handler");varhandler=Activator.CreateInstance(typeHandler);输入typeRequest=Type.GetType("Mynamespace."+typeString+"Request");//我想做什么:handler.Handle(requestItem);我不能这样做,因为handler和requestItem只是对象,所以我需要将'handler'解析为'typeHandler'并将requestItem解析为'typeRequest'编辑:我想通了,我使用InvokeMember来访问它。?typeHandler.InvokeMember("Handle",BindingFlags.InvokeMethod,null,handler,new[]{requestItem});您需要Type.MakeGenericType:TypetypeArgument=Type.GetType(string.Format("Mynamespace.{0}",typeString));类型模板=typeof(MyClass);输入genericType=template.MakeGenericType(typeArgument);对象实例=Activator.CreateInstance(genericType);请注意,您不能将其MyClass转换为特定的MyClass,因为您不知道T-但执行时它将是正确类的实例。输入closedType=typeof(MyClass).MakeGenericType(myGeneric);objectobj=Activator.CreateInstance(closedType);请注意,除非您有非通用接口或基本类型,否则与这种类型的对象对话是很棘手的(除非您使用动态作弊)。例如,非通用接口可能会有所帮助:varobj=(ISomeInterface)Activator.CreateInstance(closedType);obj.SomeMethodOnTheNonGenericInterface();我想通了,我使用InvokeMember来访问它。?以上就是C#学习教程分享的全部内容:字符串值的一般类型。如果对你有用,需要了解更多C#学习教程,希望你多多关注—typeHandler.InvokeMember("Handle",BindingFlags.InvokeMethod,null,handler,new[]{requestItem});本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: