by Jean-Camille Mercier
16. août 2013 19:54
Voici un petit dilemme comme je les aime : comment manipuler 2 classes qui possèdent toutes les deux une collection d'objet différentes mais partageant certaines propriétés ?
Exemple de ces deux classes avec une liste de lesion, une AT l'autre MO :
public class AccidentTravail
{
List<LesionAT> Lesions { get; set; }
}
public class MaladieOrdinaire
{
List<LesionMO> Lesions { get; set; }
}
Avec l'interface et ces deux classes de lesion :
public interface ILesion
{
LesionLocaliteEnum LesionLocalite { get; set; }
LesionLateraliteEnum LesionLateralite { get; set; }
}
public partial class LesionAT : ILesion { ... }
public partial class LesionMO: ILesion { ... }
Donc la seule façon d'écrire l'interface pour avoir accès à la propriété "Lesions" est en générique :
public interface ISinistreLesion<T> where T : ILesion
{
List<T> Lesions { get; set; }
}
Pour faire :
var sinistre = value as ISinistreLesion<ILesion>;
foreach (ILesion lesion in sinistre.Lesions)
{
string loc = lesion.LesionLocalite.
...
}
En effet, le compilateur n'infére pas le type des collection directement en interface !