这个问题是涉及到这样一个问题:Given System.Type T, Deserialize List<T>获取从列表中<T>元素根据ID
鉴于此功能来获取所有的元素列表...
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)的只有一个项目:
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的函数原型?
有趣 - 看起来更清洁。但是,当我尝试编译此错误时,出现错误'“错误无法将lambda表达式转换为委托类型'System.Func',因为块中的某些返回类型不会隐式转换为委托返回类型“' –
2010-11-08 22:56:05
我在lambda中使用赋值而不是相等。固定。 – spender 2010-11-09 01:04:33