用另一个调用包装匿名函数
wrap anonymous function with another call
我有这段代码,我在其中尝试通过另一个调用来包装匿名函数,所以实际上返回的是包装器的值,而不是原始函数的值。
但是在下面的代码中,我在最后一次调用中得到了 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);
}
}
func.Target
为空,因为此委托没有任何调用它的实例。您可以尝试以下代码:
Calls.Add(c => ExtraCall((int)func(c)));
我有这段代码,我在其中尝试通过另一个调用来包装匿名函数,所以实际上返回的是包装器的值,而不是原始函数的值。
但是在下面的代码中,我在最后一次调用中得到了 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);
}
}
func.Target
为空,因为此委托没有任何调用它的实例。您可以尝试以下代码:
Calls.Add(c => ExtraCall((int)func(c)));