不允许从方法推断?

时间:2016-06-07 23:03:14

标签: c#

我要猜测我自己的问题...下面注释掉的行无法编译,因为方法和函数是两个不同的东西?

有没有办法避免输入<string>?如果没有,是否有原因?如果我说得对,那是因为方法不会转换为funcs,反之亦然,那么从方法T推断出Test.A类型的解决方案怎么可能是其他的呢?在这个例子中比string

请原谅我,但似乎很奇怪我可以清楚地传递方法Test.A作为满足另一种方法参数签名Func<T, T>的论据(在我看来它们是可以互换的)。但是我没有在呼叫网站上对T进行任何推断。

public static class Test
{
    public static Func<T, T> TestFunc<T>(Func<T, T> input)
    {
        return input;
    }

    public static string A(string val)
    {
        return val;
    }
}

public class TestStuff
{
    [Fact]
    public static void TestMe()
    {
        var expected = Guid.NewGuid().ToString();
        // this fails to compile with
        // 'type arguments for method ... cannot be inferred from usage'
        // var actual = Test.TestFunc(Test.A);
        // this succeeds
        var actual = Test.TestFunc<string>(Test.A);
        // test passes proving a method satisfies a Func<T, T> parameter
        Assert.Equal(expected, actual(expected));
    }
}

0 个答案:

没有答案