相关疑难解决方法(0)

将类型参数约束为基本类型

我知道如何强制类型参数成为另一种类型的类型:

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)

c# generics type-constraints

8
推荐指数
2
解决办法
561
查看次数

标签 统计

c# ×1

generics ×1

type-constraints ×1