C#中字符串的泛型T

时间:2014-10-20 13:01:41

标签: c# generics

对不起我的英国悲惨世界。

我有一个来自XML文件的2个值,我需要它来通用方法进一步导致返回值T.在一个XML值是这种类型,但我怎么能用它作为一个类型?

示例:

var dataType = xml.Element("type").Value;
var modelList = await Mapper<dataType>(serviceXml, myNamespace, objType, serviceJson.ToString());

3 个答案:

答案 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() });

您可以做的是创建一个接口或基类,并创建一个扩展方法来处理转换。