This question is related to this question: Given System.Type T, Deserialize List<T>
Given this function to retrieve a list of all elements...
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();
}
...I want to create a function to retrieve just one item of those with the needed UID (Unique ID):
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;
}
However, this does not work since GetAllItems<typeof(T)>();
call is not properly formed.
Question 1a: How can I fix the second function to properly return a unique element, given that all classes that will call GetItemByID() have UID as an element in them? I'd love to be able to do public static <T> GetItemByID<T>(int UID)
if possible.
Question 1b: Same question, but suppose I cannot modify the function prototype of GetItemByID?