2012-02-20 34 views
0

我们必须有这样一类的传统应用程序:如何获得非通用转换方法信息?

public class Person 
{ 
private PersonType _type; 

public PersonType GetPersonType() 
{ 
return _type; 
} 
} 

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

所以每次我们想要得到的类型,用它做的东西,我们要抛弃这样的:

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

后来我想也许我们可以有一个通用的过载是这样的:

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

所以我将重载的方法添加到类中。后来我发现,有一个使用反射来获取第一种方法的另一个代码:

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

但自从我加入了这个过载,我们正在一个模棱两可的方法exception.I试图找到一种方法来区分莫名其妙的确切我一直在寻找没有成功的超载。 所以问题是我们如何才能获得非通用的超载信息? (正如我说,这是一个使用框架2内置的遗留应用程序,我们不能使用LINQ和\或扩展。)

+0

您的通用方法与演员阵列的价值是什么?在我看来,你应该删除通用的方法。 – 2012-02-20 22:29:05

+0

由于嵌套的转换,我们有充满括号的代码行。我想让代码更具可读性。例如((User)Person.GetPersonType())。Title =“Somthing”vs. Person.GetPersonType ().Title =“Something” – Beatles1692 2012-02-20 22:35:39

回答

1

你可以知道哪些方法是第一个非一般的一个是这样的:

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

你没看过我的文章?我们不能使用扩展:) – Beatles1692 2012-02-20 22:41:01

+0

你的意思是没有任何东西,所以我们可以告诉哪个方法是哪个? – Beatles1692 2012-02-20 22:42:29

+0

道歉,过了一会又回到帖子,忘记了那部分 – 2012-02-20 22:43:20