从TypeName获取T以传递给泛型方法

时间:2018-06-04 18:08:50

标签: c# generics

我有一个字典,其中键是一个类型的名称,值是该类型的对象,如下所示:

var dict = new Dictionary<string, object>()
{
   { "System.Int32", 3 },
   { "System.String", "objectID" },
   { "System.Boolean", false }
}

我想遍历该字典并将值传递给泛型方法,如下所示:

static void ProcessValue<T>(T inputValue)
{
   // do something here
}

我知道字典中的每个条目应该是什么,我知道我可以使用Type.GetType(string)从字典键中获取T的类型,但是我无法弄清楚是否存在一种将其传递给泛型方法而不执行以下操作的方法:

foreach (var entry in dictionaryEntries)
{
    var t = Type.GetType(entry.Key);

    if (t == typeof(int))
         ProcessValue<int>(entry.Value);    
    else if (t == typeof(Guid))
         ProcessValue<Guid>(entry.Value);
    else if...
}

有没有更好的方法来完成我想要做的事情?

1 个答案:

答案 0 :(得分:0)

您可以在MakeGenericMethod

上使用ProcessValue来电
var dict = new Dictionary<string, object>
{
    {"System.Int32", 3},
    {"System.String", "objectID"},
    {"System.Boolean", false}
};

var processValueMethod = typeof(/* type that contains ProcessValue */)
    .GetMethod("ProcessValue");

foreach (var entry in dict)
{
    var t = Type.GetType(entry.Key);
    MethodInfo method = processValueMethod.MakeGenericMethod(t);
    method.Invoke(null, new []{entry.Value});
}

查看demo