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 を取得する方法についてのアイデアはありますか? または別のアプローチ?

4

1 に答える 1

0

最初のものは機能します。ないのは 2 番目だけです。その理由は、 namePropと typeのプロパティが存在しないためintですClass1。代わりにキャスト1すると機能します。TestEnumint

この動作は、他の Reflection の動作と一致しています。パラメーターの型が一致しない場合、メンバーは見つかりません。

于 2012-10-04T18:11:15.127 に答える