我在设计我的功能时遇到问题,因此它可以针对不同类型采取不同的行动。我的函数用于创建具有不同类型的对象列表,因此创建几个类似的函数不会有问题,但如果可能的话我想避免它让我的代码变短:
static const int FIRST_TYPE = 0;
static const int SECOND_TYPE = 1;
static const int THIRD_TYPE = 2;
我使用那些int
作为函数的参数:
public void foo(int type)
{
List<TypeIDontYetKnow> deserialized;
switch (type)
{
case FIRST_TYPE:
deserialized = new List<A>();
break;
case SECOND_TYPE:
deserialized = new List<B>();
break;
case THIRD_TYPE:
deserialized = new List<C>();
break;
}
}
有可能实现这样的目标吗?
答案 0 :(得分:11)
您需要通用方法
public void foo<T>()
{
List<T> deserialized = new List<T>();
}
答案 1 :(得分:2)
你可以使用IList
的非通用deserialized
来执行此操作,因为List<T>
实现了它:
IList deserialized;
但不应这样做。有关您要实现的目标的更多详细信息可能有助于我们为您提供更好的解决方案:
A
,B
和C
有共同子类,则可能无法区分
在编译时在类型之间但在{中使用List<ABCBase>
第一名。