2012-02-20 35 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