对不起我的英国悲惨世界。
我有一个来自XML文件的2个值,我需要它来通用方法进一步导致返回值T.在一个XML值是这种类型,但我怎么能用它作为一个类型?
示例:
var dataType = xml.Element("type").Value;
var modelList = await Mapper<dataType>(serviceXml, myNamespace, objType, serviceJson.ToString());
答案 0 :(得分:1)
1)使用Type.GetType
加载类型2)使用反射创建通用Mapper,即typeof(Mapper&lt;&gt;)。CreateGenericType(dataType)
3)使用Activator.CreateInstance创建通用Mapper的实例
答案 1 :(得分:0)
您可以使用带有字符串的静态GetType
方法,如果可以找到则返回Type
Type.GetType("System.Collections.Generic.Dictionary`2[System.String,[MyType,MyAssembly]]")
如果找不到字符串表示的类型,它将返回null
获取类型后,您可以通过反射使用Mapper:如果Mapper是一种方法,那么使用以下
MethodInfo method = this.GetType().GetMethod("Mapper"); // this.GetType works if you aren't in a static method
MethodInfo generic = method.MakeGenericMethod(Type.GetType("theXmlValue"));
generic.Invoke(this, new object[] {/* your parameters to the Mapper method */});
答案 2 :(得分:0)
您不能将类型变量用作通用方法中的参数。必须在编译时知道该类型。您可以通过调用使用MakeGenericMethod调用创建的方法来完成反射。我认为它看起来像这样:
var method = Mapper.GetType().GetMethod("DoesEntityExist")
.MakeGenericMethod(new Type[] { dataType });
method.Invoke(this, new object[] { serviceXml, myNamespace, objType, serviceJson.ToString() });
您可以做的是创建一个接口或基类,并创建一个扩展方法来处理转换。