我不知道的类型的对象列表';我还不知道C#

我不知道的类型的对象列表';我还不知道C#,c#,C#,我在设计我的函数时遇到了一个问题,因此它可以针对不同的类型执行不同的操作。我的函数用于创建不同类型的对象列表,因此创建几个类似的函数不会有问题,但如果可能的话,我希望避免使用它,以使我的代码稍微短一点: static const int FIRST_TYPE = 0; static const int SECOND_TYPE = 1; static const int THIRD_TYPE = 2; 我使用这些ints作为函数的参数: public void foo(int type) {

我在设计我的函数时遇到了一个问题,因此它可以针对不同的类型执行不同的操作。我的函数用于创建不同类型的对象列表,因此创建几个类似的函数不会有问题,但如果可能的话,我希望避免使用它,以使我的代码稍微短一点:

static const int FIRST_TYPE = 0;
static const int SECOND_TYPE = 1;
static const int THIRD_TYPE = 2;
我使用这些
int
s作为函数的参数:

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;
    }
}
公共void foo(int类型)
{
列表反序列化;
开关(类型)
{
案例优先\u类型:
反序列化=新列表();
打破
第二种类型:
反序列化=新列表();
打破
第三种类型:
反序列化=新列表();
打破
}
}
有可能实现这样的功能吗?

您可以使用非通用的
IList
来实现
反序列化的
,因为
列表实现了它:

IList deserialized;
然而,你不应该那样做。关于您试图实现的目标的更多详细信息可能有助于我们为您提供更好的解决方案:

  • 首先是一种通用方法
  • 如果
    A
    B
    C
    有一个共同子类,则可能无法区分 在编译时的类型之间,但在 第一名

    • 您需要一种通用方法

      public void foo<T>()
      {
          List<T> deserialized = new List<T>();
      }
      
      public void foo()
      {
      列表反序列化=新列表();
      }
      
      如果要使用此解决方案,请使用
      枚举
      而不是单独的
      常量
      值。然后如何使用
      反序列化
      ?我猜想它一定是同一个函数后面的东西,因为它是一个局部函数,是一个
      void
      方法。顺便说一下,在C#中,对
      const
      成员使用PascalCase,并且不能有
      static
      修饰符。从上面的代码来看,这是不够的。OP使用
      int
      (实际上应该是
      enum
      )来确定要实例化的列表类型。他们真正想要的是工厂方法。这就是我要建议的+1,这段代码与示例相当。除了它使用类型参数而不是松散的
      int
      @James之外,我怀疑它是在对类型进行编码。让我们看看OP是否会发现这一点有用,或者添加更多信息。是的@MBen这正是我想要的。这些int确实是硬编码类型。非常感谢。我很快会将此标记为答案。:)