用另一个调用包装匿名函数

时间:2015-02-05 17:12:27

标签: c# visual-studio-2013 .net-4.5

我有这个代码,其中我试图通过另一个调用来包装一个匿名函数,所以当它实际上是返回的包装器的值而不是原始函数时。

在下面的代码中,我在最后一次通话中得到NullPointerException。我确信我没有做正确的事情,但打败了我的实力。

class Program
{
    public class MyClass
    {
        public int MyProp { get; set; }
    }

    private static List<Func<MyClass, object>> Calls;

    private static object ExtraCall(int obj)
    {
        var returnVal = 8;

        //do some stuff

        return returnVal;
    }

    static void Main(string[] args)
    {
        Calls = new List<Func<MyClass, object>>();

        Calls.Add(c => c.MyProp);

        Func<MyClass, object> func = c => c.MyProp;
        Calls.Add(c => ExtraCall((int)func(func.Target as MyClass)));

        var obj = new MyClass(){ MyProp = 7 };
        var test1 = Calls[0](obj);
        var test2 = Calls[1](obj);
    }
}

1 个答案:

答案 0 :(得分:2)

func.Target为null,因为此委托没有调用它的任何实例。您可以尝试以下代码:

    Calls.Add(c => ExtraCall((int)func(c)));