【发布时间】:2010-12-07 10:25:00
【问题描述】:
我正在为下面的代码苦苦挣扎。
我有一个方法 Find,它对我来说是通用的,我可以将它用于从同一个基类派生的不同类型。在这个方法中,我曾经有一个委托传递给 FindAll 调用。我删除了这个委托,并尝试将其作为参数传递,因此更多方法可以使用具有不同过滤条件的 Find 方法。
问题在于过滤器委托必须能够接受模板类型作为参数,而编译器抱怨 Find 方法的参数不匹配。当我调用 Find 时,问题发生在方法 FindItems 内部。
有什么想法吗?非常感谢
delegate bool FindFilter<T_Item>(T_Item item);
private List<MailItem> Find<T_Item, T_Adaptor>(T_Adaptor adaptor, MailItemId mailId, FindFilter filter)
{
List<T_Item> tempList = ((List<T_Item>)(typeof(T_Adaptor).InvokeMember(
"Load",
BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
null, adaptor,
new Object[] { null, mailId, null })));
totalItemsFound = tempList.Count;
List<T_Item> Items = tempList.FindAll(
filter()
);
List<MailItem> mailItems = new List<MailItem>();
foreach (T_Item itm in Items)
mailItems.Add(itm as MailItem);
return mailItems;
}
private static bool FindAssignedItemsOnly<T_Item>(T_Item itm)
{
MailItem mi = itm as MailItem;
if (mi == null) return false;
return (mi.StateInd.Code == StateInd.ASSIGNED);
}
public List<MailItem> FindItems(MailItemId itemId, string mailCategoryCd)
{
List<MailItem> mailItems = new List<MailItem>();
FindFilter<MailItem> f = FindAssignedItemsOnly;
// Problem happens in the line below
mailItems = Find<Letter, BasicItemAdapter>(new LetterItemAdapter(), itemId, f);
return mailItems;
}
【问题讨论】:
-
什么是 T_Item ,能多发些代码吗?
-
T_Item 是模板类型。它可以是从 MailItemId 派生的任何项目,例如 Letter