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



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

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);

有人接电话吗?

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

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

检查此响应:如何使用反射来调用泛型方法?

我认为反射库应该对此有所帮助。反射可能很慢,但如果在程序开始时制作一个字符串到类型的字典,则可以加快反射速度。

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…"

相关内容

  • 没有找到相关文章

最新更新