我无法投泛型类型到另一种泛型类型,除了演员应该是有效的投泛型类型的失败
我想存档是在短期(为MyModel
实施IModel
和MyImplementation
实施IImplementation
) :
IImplementation<IModel> implementation = new MyImplementation<MyModel>();
Assert.IsNull(implementation as IImplementation<IModel>);
这有点令人困惑,因为类型应该是有效的。
完整的概念模型:
interface IModel {}
class MyModel : IModel {}
interface IImplementation<TModel> where TModel : IModel { }
class MyImplementation<TModel> : IImplementation<TModel>
where TModel : IModel { }
public void CallRegister()
{
var implementation = new MyImplementation<MyModel>();
var instance = CastModel(implementation);
Assert.IsNotNull(instance); //this assert fails!
}
private object CastModel<TModel>(IImplementation<TModel> implementation) where TModel : IModel
{
return implementation as IImplementation<IModel>;
}
我需要这个转换,使我能够多IImplementation
S保存到同一Dictionary<Type, IImplementation<IModel>>
,这里的关键是通过做typeof(TModel)
获得。 要做到这一点类型安全我不想使用Dictionary<Type, object>
。
- 为什么演员表失败?有没有额外的资源呢?它与Invalid Cast of Type Constrained C# Generic类似的问题,但它不解释为什么只是它不起作用。
- 如果这种类型的转换是不可能的,如上所述的归档类似于字典的功能的最佳方式是什么?
很好的回答!有限制的字典是一个不错的主意,可能是我的出路。我只使用'Add','Remove'和'Get',所以它应该很容易做到。非常感谢! –