当它是第一个泛型参数的子类型时,是否可以推断出第二个泛型参数的类型。
例如,给定以下类:
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必须是相同的。