この関数を修正して、任意のクラスのリストを入力できるようにするにはどうすればよいですか?
private static List<Type> CopyObjList(List<Type> Group, List<Type> AddGroup)
{
foreach (Type obj in AddGroup)
Group.Add(obj);
return Group;
}
この関数を修正して、任意のクラスのリストを入力できるようにするにはどうすればよいですか?
private static List<Type> CopyObjList(List<Type> Group, List<Type> AddGroup)
{
foreach (Type obj in AddGroup)
Group.Add(obj);
return Group;
}
ジェネリックスとAddRange
private static void CopyObjList<T>(List<T> Group, List<T> AddGroup)
{
Group.AddRange(AddGroup);
}
Listは参照型であるため、戻り型は必須ではありません。
良い1日を
ご覧のとおり、既存のリストに要素の範囲を追加する必要があります。このための関数を作成する必要はありません。簡単に使用できます
AddRange
Listクラスのメソッド
考えるべきことがいくつかあります。
本当に既存のリストを変更しますか?
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;
}
これにより、元のリストは変更されず、新しいリストが返され、派生クラスのインスタンスも追加できるようになります。
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);
質問についてはよくわかりませんが、どのタイプでも受け入れるコレクションが必要なようです。もしそうなら、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;
}