小编mtr*_*udt的帖子

C#委托与lambda表达式的逆向性

下面的第二个测试方法无法编译(无法将lambda表达式转换为目标类型D1).这是否意味着(非泛型)委托逆转不适用于lambda表达式?

[TestFixture]
public class MyVarianceTests
{
    private abstract class Animal {}
    private class Tiger : Animal {}

    private delegate Type D1(Tiger tiger);

    private static Type M1(Animal animal)
    {
        return animal.GetType();
    }

    [Test]
    public void ContravariantDelegateWithMethod()
    {
        D1 func = M1;
        Type result = func(new Tiger());
        Assert.AreEqual(result, typeof (Tiger));
    }

    [Test]
    public void ContravariantDelegateWithLambda()
    {
        D1 func = (Animal animal) => animal.GetType();
        Type result = func(new Tiger());
        Assert.AreEqual(result, typeof (Tiger));
    }
}
Run Code Online (Sandbox Code Playgroud)

c# lambda delegates contravariance method-group

3
推荐指数
1
解决办法
726
查看次数

标签 统计

c# ×1

contravariance ×1

delegates ×1

lambda ×1

method-group ×1