我认为这应该有用......但事实并非如此。我得到了一个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 :(得分:0)
第一个有效。只有第二个没有。因此,原因是Prop
中没有名称为int
且类型为Class1
的属性。如果您将1
转换为TestEnum
而不是int
,那么它将起作用。
此行为与其他反射行为一致。如果参数类型不匹配,则找不到该成员。