C# Func委托不';t链法
让我们想象一下简单的委托调用:C# Func委托不';t链法,c#,delegates,func,C#,Delegates,Func,让我们想象一下简单的委托调用: void Main() { Func<int, int, string> tfunc = null; tfunc += Add; // bind first method tfunc += Sub; // bind second method Console.WriteLine(tfunc(2, 2)); } private string Add(int a, int b) { return "Add: "
void Main()
{
Func<int, int, string> tfunc = null;
tfunc += Add; // bind first method
tfunc += Sub; // bind second method
Console.WriteLine(tfunc(2, 2));
}
private string Add(int a, int b)
{
return "Add: " + (a + b).ToString();
}
private string Sub(int a, int b)
{
return "Sub: " + (a - b).ToString();
}
那么,为什么不调用Add方法呢?我希望调用方法Add,然后方法Sub.Add被正确链接和调用,请查看
void Main()
{
Func<int, int, string> tfunc = null;
tfunc += Add; // bind first method
tfunc += Sub; // bind second method
Console.WriteLine(tfunc(2, 2));
}
private string Add(int a, int b)
{
Console.WriteLine("Inside Add");
return "Add: " + (a + b).ToString();
}
private string Sub(int a, int b)
{
Console.WriteLine("Inside Sub");
return "Sub: " + (a - b).ToString();
}
由于无法访问而没有链接的是Add方法的结果。在链接的情况下,返回值的委托返回调用的最后一个方法的值,即添加到委托的最后一个方法
本规范第15.4部分对此进行了规定
调用其调用列表包含
多个条目通过调用
调用列表,按顺序同步。。。
如果委托调用包括输出参数或
返回值,它们的最终值将来自
列表中的最后一个代表
问题是返回值在方法调用之间没有传递,因此输出只捕获最后返回的字符串。即,Add的返回丢失 调用具有返回值的委托时,只有最后执行的委托才会向调用代码返回值。在这种情况下,首先调用的
Add
的返回值被随后执行的Sub
委托丢弃。
void Main()
{
Func<int, int, string> tfunc = null;
tfunc += Add; // bind first method
tfunc += Sub; // bind second method
Console.WriteLine(tfunc(2, 2));
}
private string Add(int a, int b)
{
Console.WriteLine("Inside Add");
return "Add: " + (a + b).ToString();
}
private string Sub(int a, int b)
{
Console.WriteLine("Inside Sub");
return "Sub: " + (a - b).ToString();
}
Inside Add
Inside Sub
Sub: 0