繁体   English   中英

如何在C#中为泛型方法传递动态类类型

[英]How to pass Dynamic Class type for a Generic method in C#

我有一个通用方法

JsonMapper.ToObject<>(jsonString);

但是在这里我想将Generic类型传递给String中的方法,那么如何将String中的类类型传递给此方法泛型呢?

在java中我可以使用

Class.forName("");

但是在C#中我应该怎么做?

没有什么好方法可以将反射和泛型混合使用。 他们不是朋友 您可以使用MakeGenericMethod等,但是随后您需要手动做很多事情

坦白说,我的建议是:不要设计像这样的工具来使用通用API。 使用非通用Type为基础的API。 您始终可以其作为泛型重新公开

public T Foo<T>(...) { return (T) Foo(typeof(T), ...); }

public object Foo(Type type, ...) {
    // the actual code
}

可以通过MakeGenericMethodInvoke进行完全相反的操作,但是效率较低且灵活性较低。

要从string获取Type ,请参见Type.GetType(string)assembly.GetType(string)

用这样的东西:

MethodInfo method = (from x in typeof(JsonMapper).GetMethods(BindingFlags.Static | BindingFlags.Public)
                     where x.Name == "ToObject" && x.IsGenericMethodDefinition
                     let pars = x.GetParameters()
                     where pars.Length == 1 && pars[0].ParameterType == typeof(string)
                     select x).Single();

// Your generic type
Type type = Type.GetType("System.String");

MethodInfo method2 = method.MakeGenericMethod(type);

// Your input
string jsonString = "Hello";

object result = method2.Invoke(null, new object[] { jsonString });

如果ToObject<>static并且具有如下签名:

public static T ToObject<T>(string input)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM