我有一个像
这样的课程class Btree<T> where T : IComparable { }
现在我想编写一个控制器,根据输入创建一个对象。 但我不想重写所有可能类型的代码。 所以我需要这样的东西:
Btree t = null;
if(input == "int")
t = new Btree<int>();
if(input == "string")
t = new Btree<string>();
之后,无论btree究竟是什么类型,我都想对待它。这有可能吗?
答案 0 :(得分:3)
从字面上回答你的问题:是的,你可以使用反射来做到这一点。有关详细信息,请参阅以下问题。
但是,你不应该这样做。泛型是编译时类型安全的工具。如果您不需要(并且从您的示例中看起来似乎没有),仅使用Btree<IComparable>
可能是解决您问题的最合适的解决方案:
var t = new Btree<IComparable>();
答案 1 :(得分:0)
你的&#34; Btree t = null;&#34;如果它实际上是泛型类,则行无效。
BTree不能同时是通用的,也不是通用的。如果它是通用的,则必须在声明变量&#34; t&#34;时定义类型。