我知道如何强制类型参数成为另一种类型的子类型:
public interface IMapping<T2>
{
public void Serialize<T3>(T3 obj)
where T3 : T2;
}
...
var mapping = MapManager.Find<Truck>();
mapping.Serialize(new TonkaTruck());
Run Code Online (Sandbox Code Playgroud)
有没有办法强制类型参数成为另一种类型的超类型?
public interface IMapping<T2>
{
public void IncludeMappingOf<T1>()
where T2 : T1; // <== doesn't work
}
...
var mapping = MapManager.Find<Truck>();
// Truck inherits Vehicle
// Would like compiler safety here:
mapping.IncludeMappingOf<Vehicle>();
mapping.Serialize(new TonkaTruck());
Run Code Online (Sandbox Code Playgroud)
目前,我不得不在运行时使用IsSubclassOf内部比较T1和T2 IncludeMappingOf.编译安全的解决方案更可取.有任何想法吗?
编辑: 改变示例,以减少设计臭.
注意:链接的问题非常相似,但没有给出合适的答案.希望这个问题也会对这个问题有所了解.
编辑#2:
更简单的例子:
public class Holder<T2>
{
public T2 Data { get; …Run Code Online (Sandbox Code Playgroud)