我想知道是否有一个特定的原因,为什么C#编译器似乎不支持泛型的两级类型推断。
请参阅以下代码示例:
class Program
{
static void Main(string[] args)
{
var instance = new GenericClass<object>();
Test<GenericClass<object>, object>(instance); // works
Test(instance); // Type arguments cannot be inferred
}
static void Test<TGenericClass, T>(TGenericClass obj)
where TGenericClass : IGenericClass<T>
{
}
}
public class GenericClass<T> : IGenericClass<T>
{
public T Prop { get; set; }
}
public interface IGenericClass<T>
{
T Prop { get; set; }
}
编译器无法推断类型GenericClass<object>
的对象是否遵守类型约束,而是必须手动指定类型。有没有理由说编译器不支持跨多个级别的推理?你通常如何处理它?</ p>
编辑:假设TGenericClass
必须是通用的。