1

この関数を修正して、任意のクラスのリストを入力できるようにするにはどうすればよいですか?

private static List<Type> CopyObjList(List<Type> Group, List<Type> AddGroup)
{
    foreach (Type obj in AddGroup)
        Group.Add(obj);
    return Group;
}
4

5 に答える 5

1

ジェネリックスとAddRange

private static void CopyObjList<T>(List<T> Group, List<T> AddGroup)
{
      Group.AddRange(AddGroup);
}

Listは参照型であるため、戻り型は必須ではありません。

良い1日を

于 2012-05-05T03:45:48.020 に答える
1

ご覧のとおり、既存のリストに要素の範囲を追加する必要があります。このための関数を作成する必要はありません。簡単に使用できます

AddRange

Listクラスのメソッド

于 2012-05-05T03:47:52.810 に答える
1

考えるべきことがいくつかあります。

  • ジェネリック
  • 派生型も追加できるようにしたいですか
  • 本当に既存のリストを変更しますか?

    private static List<TList> CopyObjList<TList, TElem>(List<TList> Group, List<TElem> AddGroup)
      where TElem : TList
    {
      List<TList> result = new List<TList>(Group);
    
      foreach (var item in AddGroup)
      {
        result.Add(item);
      }
    
      return result;
    }
    

これにより、元のリストは変更されず、新しいリストが返され、派生クラスのインスタンスも追加できるようになります。

于 2012-05-05T04:15:20.207 に答える
0

ジェネリック

private static List<T> CopyObjList<T>(List<T> Group, List<T> AddGroup)
{
    foreach(T obj in AddGroup)
        Group.Add(obj);
    return Group;
}

これにより、コンパイル時の型を関数に渡すことができます。

例:

List<string> employees = new List<string> { "Bob", "Joe", "Fred" };
List<string> newHires = new List<string> { "Steve", "John" };

List<string> allEmployees = CopyObjList<string>(employees, newHires);

foreach(string employeeName in allEmployees)
    Console.WriteLine(employeeName);
于 2012-05-05T03:40:51.540 に答える
0

質問についてはよくわかりませんが、どのタイプでも受け入れるコレクションが必要なようです。もしそうなら、ArrayListは仕事をすることができます:

private static ArrayList CopyObjList(ArrayList Group, ArrayList AddGroup) 
{ 
    ArrayList arr = new ArrayList(Group);
    arr.AddRange(AddGroup);
    return arr;
} 

追加するグループがArrayListと異なる場合は、ICollectionを使用できます。

private static ArrayList CopyObjList(ArrayList Group, ICollection AddGroup)
{
    ArrayList arr = new ArrayList(Group);
    arr.AddRange(AddGroup);
    return arr;
} 
于 2012-05-05T04:13:39.280 に答える