Je suis aux prises avec le code ci-dessous.Passer le délégué avec les arguments de modèle comme paramètre
J'ai une méthode Find, qui pour moi est générique en termes je peux l'utiliser pour différents types dérivant de la même classe de base. À l'intérieur de cette méthode j'avais un délégué passé à l'appel FindAll. J'ai supprimé ce délégué et j'essaie de le passer en paramètre, donc plus de méthodes peuvent utiliser la méthode Find avec différents critères de filtrage. Le problème est que le délégué de filtre doit être en mesure d'accepter un type de modèle en tant qu'argument, et le compilateur se plaint que les paramètres de la méthode Find ne correspondent pas à. Le problème se produit dans la méthode FindItems lorsque j'appelle Find.
Des idées? Un grand merci
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;
}
Qu'est-ce que T_Item, pouvez-vous poster plus de code? – TalentTuner
T_Item est le type de modèle. Cela peut être n'importe quel élément dérivant de MailItemId, comme Letter par exemple – Andres