1

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

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

有接盘侠吗?

4

2 回答 2

3

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

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

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

于 2013-07-09T21:24:55.967 回答
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...”,您可能需要考虑这一点

于 2013-07-09T21:22:04.800 回答