Je ne pense même pas avoir la question correcte car je ne fais que commencer avec les génériques et mes connaissances ne sont pas très bonnes.Comment retourner une liste générique?
Dire que j'ai la méthode suivante:
public class Wrapper
{
public List<TInfoType> GetInfo<TInfoType>(Array data, EdmCmd edmCmd)
{
switch (edmCmd.meCmdType)
{
case EdmCmdType.EdmCmd_PostAdd:
List<EdmCmdPostAddInfo> info = new List<EdmCmdPostAddInfo>();
foreach (EdmCmdData item in data)
{
info.Add(new EdmCmdPostAddInfo(item.mlObjectID1, item.mlObjectID2, item.mbsStrData1, item.mlLongData1));
}
return info;
break;
default:
break;
}
}
}
Et je voudrais appeler la méthode comme:
List<EdmCmdPostAddInfo> info = wrapper.GetInfo<EdmCmdPostAddInfo>(data, edmCmd)
Quelle est la bonne façon de le faire? Je reçois l'erreur:
Cannot implicitly convert type 'System.Collections.Generic.List<EPDM.Utils.EdmCmdPostAddInfo>' to 'System.Collections.Generic.List<TInfoType>'
Je fais cela parce que le struct EdmCmd qui est passé à la méthode a plusieurs membres qui sont génériquement désignés. Il est difficile de se souvenir de ce que les membres représentent pour chaque CmdType, donc je les entoure d'une structure plus significative.
Pas tout à fait une réponse, mais je pense que vous rencontrez le problème, que les génériques sont invariants sous C# 3.0. Avec C# 4.0 qui compilerait: http://visualstudiomagazine.com/Articles/2009/05/01/Generic-Covariance-and-Contravariance-in-C-40.aspx?Page=1 –