我要猜测我自己的问题...下面注释掉的行无法编译,因为方法和函数是两个不同的东西?
有没有办法避免输入<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));
}
}