我想“以某种方式”完成以下工作:
public class GenericsTest<T> where T: ISomeInterface
{
private List<T> someList = new List<T>();
public List<ISomeInterface> GetList()
{
return someList; //of course this doesn't even compile
}
}
有没有办法做到这一点(如Java中的通配符),我只是错过了它?还是根本做不到?
编辑: 首先感谢大家的兴趣和您的回答/评论。其次,肯定有办法做到这一点,并且可能最简单和最有效的性能(虽然不确定)是创建一个正确类型的新列表并迭代地添加另一个列表的元素(在我们的例子中是 someList) . 问题在于所有这些新的差异事物,如果有办法以“泛型方式”来做到这一点,那么“入局”和“出局”。在 Java 中,这可能是:
public class GenericsTest<T extends SomeInterface> {
private List<T> someList = new ArrayList<>();
public List<? extends SomeInterface> getList() {
return someList;
}
}
所以我在徘徊是否? extends
在 C# 中有等价物。我可以接受“不”作为简短的回答,我只是想我应该先问。
编辑 2:
一些用户认为,而另一些用户则坚持认为这是与铸造有关的问题的重复。由于我标记了最适合我的答案,为了清楚起见我解释一下。伙计们,我不想投。我只是在寻找具有extends
约束的 Java 通配符的等效项。当然,Java 只有编译时泛型,这可能会有所不同。如果 C# 中的等效项通过强制转换完成,但我知道“在 Cat 列表中有一个 Dog 对象”的问题,所以我的问题是不同的。