我有一个方法,其中提前知道对象的类型,并且需要将该对象(及其类型)传递到一个方法中,例如:
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…"