我在获取c#方法类型推断对我来说很困难,我本质上有以下示例,但这会产生错误。
CS0411无法从用法中推断出方法'Test.Connect(T1)'的类型参数。尝试显式指定类型参数。
public void Main()
{
new Test<int>().Connect(new Test2()); // CS0411 The type arguments for method 'Test<int>.Connect<T1, T2>(T1)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
}
public class Test2 : ITest<Test<int>, Delegate>
{
}
public class Test<T>
{
public void Connect<T1, T2>(T1 entity)
where T1 : ITest<Test<int>, T2>
where T2 : Delegate
{
}
}
public interface ITest<T1, T2>
where T1 : Test<int>
where T2 : Delegate
{
}
编译器是否应该能够从给定的类推断参数T1和T2?我想应该,我想念什么吗?
答案 0 :(得分:1)
编译器是否应该能够从给定的类中推断出参数T1和T2?
否。
我想应该,我错过了什么吗?
您的猜测是合理且普遍的,但不正确。
类型参数从不从约束中推断,仅从参数中推断。您有足够的信息来推断T1的类型,但是编译器无法从约束条件中推断出T2必须是什么。
理论上,编译器可以从约束条件中得出推论,但我们决定仅从参数中进行推断。类型推断算法复杂,难以解释,难以实现。添加约束推断将使其变得更复杂,更难以解释且更难以实现。