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
。更新了我的答案,谢谢。编译对我来说很好-我怀疑你在什么地方输入错了。