我正在努力處理下面的代碼。以模板參數傳遞代表作爲參數
我有一個方法查找,這對我來說是泛型的術語,我可以將它用於從相同基類派生的不同類型。在這個方法中,我曾經有一個委託傳遞給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