我正在努力处理下面的代码。以模板参数传递代表作为参数
我有一个方法查找,这对我来说是泛型的术语,我可以将它用于从相同基类派生的不同类型。在这个方法中,我曾经有一个委托传递给FindAll调用。我删除了这个委托,我试图将它作为参数传递,所以更多的方法可以使用具有不同过滤条件的Find方法。
问题是,Filter委托必须能够接受一个Template类型作为参数,并且编译器抱怨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,您能发布更多的代码吗? – TalentTuner 2010-12-07 10:46:35
T_Item是模板类型。它可以是从MailItemId派生的任何项目,例如Letter,例如 – Andres 2010-12-07 10:51:42