Этот вопрос связан с этим вопросом: Данный System.Type 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 (уникальный идентификатор):
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 в качестве элемента в них? Я хотел бы иметь возможность сделать public static <T> GetItemByID<T>(int UID)
, если это возможно.
Вопрос 1b : тот же вопрос, но предположим, что я не могу изменить прототип функции GetItemByID?