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

C# 用另一个调用包装匿名函数,c#,visual-studio-2013,.net-4.5,C#,Visual Studio 2013,.net 4.5,我有一段代码,其中我试图通过另一个调用来包装一个匿名函数,所以实际上返回的是包装器的值,而不是原始函数的值 然而,在下面的代码中,我在最后一次调用中得到了一个NullPointerException。我确信我做的事情不对,但我不知道是什么 class Program { public class MyClass { public int MyProp { get; set; } } private static List<Func<M

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

然而,在下面的代码中,我在最后一次调用中得到了一个
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);
    }
}
类程序
{
公共类MyClass
{
公共int MyProp{get;set;}
}
私有静态列表调用;
私有静态对象外部调用(int obj)
{
var=8;
//做点什么
返回值;
}
静态void Main(字符串[]参数)
{
调用=新列表();
Calls.Add(c=>c.MyProp);
Func=c=>c.MyProp;
Calls.Add(c=>ExtraCall((int)func(func.Target作为MyClass));
var obj=new MyClass(){MyProp=7};
var test1=调用[0](obj);
var test2=调用[1](obj);
}
}

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

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

您希望功能目标是什么?请注意,在第二个lambda表达式中的任何位置都没有使用
c
,这应该是一个提示。或者更简单地说:
Calls.Add(c=>ExtraCall((int)func(c))
@JonSkeet.VS向我显示了一个错误,说“未知变量”,所以我添加了
tmp
。更新了我的答案,谢谢。编译对我来说很好-我怀疑你在什么地方输入错了。