2012-10-04 71 views
0

我認爲這應該工作...但它不。我得到一個MissingMemberException。使用枚舉參數調用成員行爲

class Program 
{ 
    static void Main(string[] args) 
    { 
     typeof(Class1).InvokeMember("Prop", 
             System.Reflection.BindingFlags.Public | 
             System.Reflection.BindingFlags.Instance | 
             System.Reflection.BindingFlags.SetProperty, null, new Class1(), new object[] { TestEnum.One }); 

     typeof(Class1).InvokeMember("Prop", 
             System.Reflection.BindingFlags.Public | 
             System.Reflection.BindingFlags.Instance | 
             System.Reflection.BindingFlags.SetProperty, null, new Class1(), new object[] { (int)1 }); 
    } 

} 

public class Class1 
{ 
    public TestEnum Prop { get; set; } 
} 

public enum TestEnum : int 
{ 
    One = 1, 
    Two, 
    Three 
} 

這似乎違背所有其他的System.Reflection方法的行爲......如何讓DefaultBinder正確識別方法使用任何想法?還是另一種方法?

回答

0

第一個工作。只有第二個沒有。因此,原因在於Class1中沒有名稱爲Propint的財產。如果你投1TestEnum而不是int它會工作。

此行爲與其他反射行爲一致。如果參數的類型不匹配,則找不到該成員。