この質問は、次の質問に関連しています: 与えられた System.Type T, Deserialize List<T>
すべての要素のリストを取得するこの関数を考えると...
public static List<T> GetAllItems<T>()
{
XmlSerializer deSerializer = new XmlSerializer(typeof(List<T>));
TextReader tr = new StreamReader(GetPathBasedOnType(typeof(T)));
List<T> items = (List<T>)deSerializer.Deserialize(tr);
tr.Close();
}
...必要な UID (一意の ID) を持つアイテムを 1 つだけ取得する関数を作成したい:
public static System.Object GetItemByID(System.Type T, int UID)
{
IList mainList = GetAllItems<typeof(T)>();
System.Object item = null;
if (T == typeof(Article))
item = ((List<Article>)mainList).Find(
delegate(Article vr) { return vr.UID == UID; });
else if (T == typeof(User))
item = ((List<User>)mainList).Find(
delegate(User ur) { return ur.UID == UID; });
return item;
}
ただし、GetAllItems<typeof(T)>();
呼び出しが適切に形成されていないため、これは機能しません。
質問 1a : GetItemByID() を呼び出すすべてのクラスが要素として UID を持っている場合、一意の要素を適切に返すように 2 番目の関数を修正するにはどうすればよいですか? public static <T> GetItemByID<T>(int UID)
できればやってみたい です。
質問 1b : 同じ質問ですが、GetItemByID の関数プロトタイプを変更できないとしますか?