我有以下代码,源自这篇MSDN文章:
public class First { }
public class Second : First { }
public delegate First SampleDelegate(Second a);
// Matching signature.
public static First ASecondRFirst(Second first)
{ return new First(); }
// The return type is more derived.
public static Second ASecondRSecond(Second second)
{ return new Second(); }
// The argument type is less derived.
public static First AFirstRFirst(First first)
{ return new First(); }
// The return type is more derived
// and the argument type is less derived.
public static Second AFirstRSecond(First first)
{ return new Second(); }
SampleDelegate test;
test = ASecondRFirst;
test = ASecondRSecond;
test = AFirstRFirst;
test = AFirstRSecond;
这些代码编译没有问题,但我想测试将委托分配给匿名Lambda表达式:
test = (First x) => { return new Second(); };
然而,在那一行,我遇到了错误:
“无法将 lambda 表达式转换为类型'SampleDelegate',因为参数类型与委托参数类型不匹配。”
具体地说:“参数 1 声明为类型 'ConsoleApp1.First',但应该是 ConsoleApp1.Second”(“ConsoleApp1” 是项目的名称)。
我无法理解我的 lambda 到底出了什么问题。
显然,协变、逆变等都工作得很好,似乎只是我的 lambda 出了问题。