超类型的通用对象

时间:2016-08-29 20:00:29

标签: c# generics

我有一个像

这样的课程
class Btree<T> where T : IComparable { }

现在我想编写一个控制器,根据输入创建一个对象。 但我不想重写所有可能类型的代码。 所以我需要这样的东西:

Btree t = null;
if(input == "int") 
t = new Btree<int>();
if(input == "string")
t = new Btree<string>();

之后,无论btree究竟是什么类型,我都想对待它。这有可能吗?

2 个答案:

答案 0 :(得分:3)

从字面上回答你的问题:是的,你可以使用反射来做到这一点。有关详细信息,请参阅以下问题。

但是,你不应该这样做。泛型是编译时类型安全的工具。如果您不需要(并且从您的示例中看起来似乎没有),仅使用Btree<IComparable>可能是解决您问题的最合适的解决方案:

var t = new Btree<IComparable>();

答案 1 :(得分:0)

你的&#34; Btree t = null;&#34;如果它实际上是泛型类,则行无效。

BTree不能同时是通用的,也不是通用的。如果它是通用的,则必须在声明变量&#34; t&#34;时定义类型。