3

我在设计我的功能时遇到问题,以便它可以针对不同的类型采取不同的行动。我的函数用于创建具有不同类型的对象列表,因此创建几个类似的函数不会有问题,但如果可能的话,我想避免它以使我的代码更短:

static const int FIRST_TYPE = 0;
static const int SECOND_TYPE = 1;
static const int THIRD_TYPE = 2;

我使用那些ints 作为函数的参数:

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;
    }
}

有可能实现这样的目标吗?

4

2 回答 2

11

你需要一个通用方法

public void foo<T>()
{
    List<T> deserialized = new List<T>();
}
于 2013-01-08T09:53:44.670 回答
2

可以通过使用非泛型IListfor来做到这一点deserialized,因为List<T>实现了它:

IList deserialized;

但是,您不应该那样做。有关您要达到的目标的更多详细信息可能会帮助我们向您建议更好的解决方案:

  • 首先是MBen's answer with a generic method
  • 如果A,BC有一个相互的子类,则可能在编译时不区分类型,而是List<ABCBase>首先使用 a 。
于 2013-01-08T09:53:36.960 回答