使用T调用方法,其中类型包含在字符串中

时间:2013-07-09 21:12:15

标签: c# c#-4.0 reflection

我有一个方法,提前知道对象的类型,并且该对象(及其类型)需要传递给方法,例如:

public void foo()
{
  string type_of_object = "person";
  person p = new person();

  // insert code here
}

public T method<T>(object obj)
{
  // some functions go here
  return (T)...
}

鉴于我可能需要处理数百种类型,我不想对每种类型执行switch语句。我似乎无法弄清楚如何沿着这些方向做点什么:

var foo = method<person.GetType()>(p);

任何参赛者?

2 个答案:

答案 0 :(得分:3)

您可以使用反射。在你的情况下会是这样的:

MethodInfo method = this.GetType().GetMethod("method");
MethodInfo generic = method.MakeGenericMethod(p.GetType());
generic.Invoke(this, p);

检查此回复:How do I use reflection to call a generic method?

答案 1 :(得分:0)

我认为反思库应该对此有所帮助。反射可能很慢,但如果在程序开始时,你可以为类型创建字符串字典,那么可以加快速度。

var dict = Assembly.GetExecutingAssembly().GetTypes().ToDictionary(t => t.Name, t => t);

然后,在您自己的代码中:

Type targetType;
if (!dict.TryGet(type_of_object, out targetType)) {
  // log error with unknown type
}

我在答案框中写道,而不是编辑,所以如果我错过了一些简单的话就道歉。我也不完全确定我对你的“某些功能”有所了解。 此外,我的代码没有考虑多个类型,在单独的命名空间中,具有相同的名称。如果您所做的不仅仅是“String,Int32 ......”

,您可能需要考虑这一点