我有一个方法,提前知道对象的类型,并且该对象(及其类型)需要传递给方法,例如:
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);
任何参赛者?
答案 0 :(得分:3)
您可以使用反射。在你的情况下会是这样的:
MethodInfo method = this.GetType().GetMethod("method");
MethodInfo generic = method.MakeGenericMethod(p.GetType());
generic.Invoke(this, p);
答案 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 ......”
,您可能需要考虑这一点