2

次のシナリオがあります。

public class Restriction
{
    public string RestrictionName { get; set; }
    public bool Eval(decimal Value2)
    {
        Type typeRestriction = Type.GetType(RestrictionName);
        return (bool)typeRestriction.InvokeMember("Eval",
            BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
            null,
            null,
            new object[] { this, Value2 });
    }


    /* Nested Classes */
    class A
    {
        public static bool Eval(Restriccion r, decimal value)
        {
            // Do something
        }
    }

    class B
    {
        public static bool Eval(Restriccion r, decimal value)
        {
            // Do something
        }
    }
}

私が試すとき:

    Restriction r = new Restriction();
    r.RestrictionName = "A";
    r.Value = 15;
    r.Eval(16);

System.NullReferenceException: Object reference not set to an instance of an object. デバッグ typeRestrictionでnullが表示されます。なんで?ネストされたクラスには特別な扱いがありますか?

4

2 に答える 2

2

このシナリオでは、タイプAとはネストされたタイプです。Bしたがって、それらの名前はそれぞれRestriction+ARestriction+Bです。さらに、を含む名前空間を名前Restrictionに含める必要があります。たとえば、名前空間がの場合、その名前をの名前としてConsoleApplication使用する必要があります。ConsoleApplication.Restriction+AA

于 2013-03-15T15:04:11.720 に答える
0

これは名前空間の問題です。次のコマンドでクラスタイプを参照してみてください。

Type typeRestriction = Type.GetType(string.Format("Restriction+{0}", RestrictionName));
于 2013-03-15T14:54:39.257 に答える