Accueil

C# L'interface générique sur interface

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 !