2009-12-28 19 views
76

我一個類型調用靜態方法解析通過反射,因爲我不知道該對象在編譯時的類型(我不知道,但是,它有一個解析方法,拿一個字符串)。避免模棱兩可的比賽異常

不過,我得到一個模棱兩可的比賽外,大概是因爲有很多的重載解析方法每次取一個對象(字符串,整型,雙等)。

如何在我的方法調用中更具體,以確保我達到正確的方法(解析(字符串s)),並且不拋出異常。

我的代碼如下所示:

Type returnType = p.PropertyType; 
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" }); 

回答

139

使用this超載和使用

returnType.GetMethod("Parse", new [] {typeof(string)}) 
+6

@Bitterblue我很困惑,爲什麼你會寫評論 - 爲什麼你考慮的事項值得討論的風格? – 2016-12-01 16:32:13

+7

演示文稿很好,它只是按照你喜歡的風格而不同。你沿着「如果它更藍一些,我會使用這個自行車棚」這樣的話來評論。這讓我困惑。編輯註釋:除非你不知道在這種情況下新的[] {}實際上推斷出數組的類型,而_IS_相當於新的Type []。在這種情況下,我很抱歉 - 我認爲你評論的風格(兩個作品),而可能認爲片段是錯誤的(不是)。 – 2016-12-02 11:49:19

+1

謝謝你的答案,夥計們。爲了節省下一個人的麻煩,對於引用類型,使用如下所示: typeof(string).MakeByRefType(); – BRebey 2016-12-24 00:22:21

-2
if (assembly != null) 
{ 
    List<System.Reflection.MethodInfo> mInfo = new List<System.Reflection.MethodInfo>(); 
    Type myType = null; 

    foreach (Type item in assembly.GetTypes()) 
    { 
    mInfo.Clear(); 
    mInfo = item.GetMethods().ToList(); 
    foreach (System.Reflection.MethodInfo item2 in mInfo) 
    { 
     if (item2.Name == methodName) 
     { 
     Method = item2; 
     break; 
     } 
    } 
    } 

    stateInstance = Activator.CreateInstance(myType); 
} 
return Method; 
+0

'方法'從哪裏來?稍微解釋一下你的代碼的作用並不會讓你感到傷心。 – LarsTech 2015-08-18 16:59:16

+4

是的,請避免代碼唯一的答案。添加一些關於正在發生的事情的解釋,或者爲什麼你的答案可能有幫助。 – 2015-08-18 17:02:09