使用枚举参数调用成员行为

时间:2012-10-04 18:01:31

标签: .net reflection

我认为这应该有用......但事实并非如此。我得到了一个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正确识别要使用的方法的任何想法?还是另一种方法?

1 个答案:

答案 0 :(得分:0)

第一个有效。只有第二个没有。因此,原因是Prop中没有名称为int且类型为Class1的属性。如果您将1转换为TestEnum而不是int,那么它将起作用。

此行为与其他反射行为一致。如果参数类型不匹配,则找不到该成员。