我有一个具有类型参数的类,我想将其分配给更通用的类型参数:
public StrategyContext<T> : where T : IStrategy {}
StrategyContext
是一个帮助设计单元测试的类。使用xUnit和Theroy
属性,我可以对我的所有策略断言一些常见的行为。例如:
[Theory]
[InlineData(typeof(LeftStrategy))]
[InlineData(typeof(RightStrategy))]
public void HasAName(Type contextType)
{
Type strategy = typeof(StrategyContext<>);
var context = (StrategyContext<IStrategy>)Activator.CreateInstance(strategy.MakeGenericType(contextType));
}
不幸的是,运行时无法从StrategyContext<LeftStrategy>
转换为StrategyContext<IStrategy>
所以我认为协方差就是我所需要的,但不可能将该类声明为:
public StrategyContext<out T> : where T : IStrategy {}
还有其他解决方案吗?