3

タイプごとに異なる動作をするように関数を設計することに問題があります。私の関数は、さまざまなタイプのオブジェクトのリストを作成するために使用されるため、いくつかの同様の関数を作成することは問題ありませんが、可能であれば、コードを少し短くするためにそれを避けたいと思います。

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

このようなことを達成することは可能ですか?

4

2 に答える 2

11

ジェネリックメソッドが必要です

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

実装されているため、非ジェネリックの for を使用してそれを行うことができます。IListdeserializedList<T>

IList deserialized;

ただし、それを行うべきではありません。あなたが達成しようとしていることの詳細は、より良い解決策を提案するのに役立つかもしれません:

  • まず、ジェネリック メソッドを使用したMBen の回答があります。
  • とが相互サブクラスを持っている場合A、コンパイル時に型を区別せずに最初から a を使用する可能性があります。BCList<ABCBase>
于 2013-01-08T09:53:36.960 に答える