C#嵌套通用约束(语法糖)

时间:2016-11-09 17:07:57

标签: c# generics

当它是第一个泛型参数的子类型时,是否可以推断出第二个泛型参数的类型。

例如,给定以下类:

public interface IContainer<in TItem>
{
    void Add(TItem item);
}

public class Container<TItem> : IContainer<TItem>
{
    public void Add(TItem item)
    {
        // Add item to container.
    }
}

我们尝试以下代码,显示一种有效的方法,另一种方法无效:

public static class Program
{
    public static void DoSomething<TContainer, TItem>(TItem item)
        where TContainer : IContainer<TItem>, new()
    {
        var container = Activator.CreateInstance<TContainer>();
        container.Add(item);
    }

    public static void Test()
    {
        // 1. Valid:
        DoSomething<Container<int>, int>(5);

        // 2. Not valid:
        DoSomething<Container<int>>(5);
    }
}

这些类型(int)必须始终相同,并且由约束验证。

我认为这与链接副本不同。这个问题要求避免重复相同的类型,例如<T1<T2>,T2>链接的问题询问没有指定类型。编译器已经可以使用约束来验证每个T2必须是相同的。

0 个答案:

没有答案