如何获取非泛型的转换方法信息?

时间:2012-02-20 22:26:28

标签: generics reflection casting c#-2.0

我们有一个遗留应用程序,它有一个这样的类:

public class Person
{
private PersonType _type;

public PersonType GetPersonType()
{
return _type;
}
}

PersonType是多个人类型(用户,客户和......)的基类

因此,每当我们想要使用它来执行某些操作时,我们应该像这样抛出它:

var userType=(User)Person.GetPersonType();

然后我想也许我们可以有这样的泛型重载:

var userType=Person.GetPersonType<User>();

所以我将重载的方法添加到了class中。后来我发现还有另一个代码使用反射来获得第一个方法:

var methodInfo=person.GetType().GetMethod("GetPersonType");

但是由于我添加了这个重载,我们得到了一个模糊的方法异常。我试图找到一种方法以某种方式区分我正在寻找的确切重载而没有成功。 那么问题是我们如何获得非泛型过载信息? (正如我所说,它是使用框架2构建的遗留应用程序,我们不能使用Linq和\或Extensions。)

1 个答案:

答案 0 :(得分:1)

你可以告诉哪个方法是第一个非通用的方法:

MethodInfo[] methods = person.GetType().GetMethods();
foreach (MethodInfo mi in methods)
    if (mi.Name == "GetPersonType" && !mi.IsGenericMethodDefinition)
        return mi;