C# 未从上下文推断类型参数

C# 未从上下文推断类型参数,c#,.net,generics,C#,.net,Generics,我对泛型扩展有问题。我有一个简单的IMapping接口,所有映射都实现了这个接口。我想简化测试的模拟,所以我为它创建了扩展。但问题是,我得到的方法的类型参数无法从用法中推断。错误。我可以显式地指定类型(这样就行了),但这不应该是必需的,因为我可以从上下文中推断出来(因为whereconstraint)。我错过什么了吗 public static void SetupRandomMapping<TMapping, TSource, TDestination>(this Mock<

我对泛型扩展有问题。我有一个简单的
IMapping
接口,所有映射都实现了这个接口。我想简化测试的模拟,所以我为它创建了扩展。但问题是,我得到的
方法的类型参数无法从用法中推断。
错误。我可以显式地指定类型(这样就行了),但这不应该是必需的,因为我可以从上下文中推断出来(因为
where
constraint)。我错过什么了吗

public static void SetupRandomMapping<TMapping, TSource, TDestination>(this Mock<TMapping> mock)
    where TMapping : class, IMapping<TSource, TDestination>
{
    // next line does not work
    mock.SetupRandomMapping(It.IsAny<TSource>(), out var dummy);
}

public static void SetupRandomMapping<TMapping, TSource, TDestination>(this Mock<TMapping> mock, TSource source, out TDestination destination)
    where TMapping : class, IMapping<TSource, TDestination>
{
    // some code ...
}

推理中不使用约束,您必须明确指定
目的地
参数的类型:
,out TDestination dummy
如果删除
TMapping
并将其替换为
IMapping
?@NetMage,但它只适用于
IMapping
而不适用于子接口,例如
XToYMapping:IMapping
。那么,恐怕您必须手动指定类型或创建帮助程序扩展方法来处理子接口。
public interface IMapping<in TSource, out TDestination>
{
    TDestination Map(TSource src);
}