相关疑难解决方法(0)

C#泛型:简化类型签名

如果我有一个如下所示的通用Item类:

abstract class Item<T>
{
}
Run Code Online (Sandbox Code Playgroud)

和一个看起来像这样的项目容器:

class Container<TItem, T>
    where TItem : Item<T>
{
}
Run Code Online (Sandbox Code Playgroud)

由于TItem依赖于T,是否可以简化Container的类型签名,使其只需要一个类型参数?我真正想要的是这样的:

class Container<TItem>
    where TItem : Item   // this doesn't actually work, because Item takes a type parameter
{
}
Run Code Online (Sandbox Code Playgroud)

所以我可以实例化如下:

class StringItem : Item<string>
{
}

var good = new Container<StringItem>();
var bad = new Container<StringItem, string>();
Run Code Online (Sandbox Code Playgroud)

当TItem是StringItem时,编译器应该能够推断T是字符串,对吧?我该如何实现这一目标?

所需用法:

class MyItem : Item<string>
{
}

Container<MyItem> container = GetContainer();
MyItem item = container.GetItem(0);
item.MyMethod();
Run Code Online (Sandbox Code Playgroud)

c# generics

16
推荐指数
1
解决办法
733
查看次数

标签 统计

c# ×1

generics ×1