C#中的多级类型推断

时间:2016-04-28 08:47:42

标签: c# generics type-inference

我想知道是否有一个特定的原因,为什么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必须是通用的。

0 个答案:

没有答案