簡體   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