web-dev-qa-db-fra.com

Impossible de convertir implicitement le type 'System.Collections.IList' en 'System.Collections.Generic.List

C'est l'erreur que je rencontre

Erreur 1 Impossible de convertir implicitement le type System.Collections.Generic.IList<Model.DTO.RoleDTO> en System.Collections.Generic.List<Model.DTO.RoleDTO>. Une conversion explicite existe (manque-t-il un casting?) 

Mon code:

IList<RoleDTO> rl = new List<RoleDTO>();

        rl.Add(new RoleDTO{ roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), 
role = "admin" });


UserDTO user = new UserDTO 
             {
                username = "administrator",
                email = "[email protected]",
                role = rl
             };

Et le modèle:

namespace Model.DTO
{
    public class UserDTO
    {
        public string username { get; set; }
        public string email { get; set; }
        public IList<RoleDTO> role { get; set; }
    }

    public class RoleDTO
    {
        public Guid roleId { get; set; }
        public string role { get; set; }
    }
}

Comment puis-je le faire correctement? 

4
Gerald Hughes

Il suffit de changer r1 pour être IList<RoleDTO>.

IList<RoleDTO> rl = new List<RoleDTO>();

Vous ne pouvez pas mélanger des listes génériques et non génériques car IList<T> n'hérite pas de IList et List<T> n'hérite pas de List et ne met pas en œuvre IList.

MODIFIER

Basé sur la nouvelle erreur que vous avez, cela signifie que vous essayez quelque part de convertir un IList<RoleDTO> en List<RoleDTO>, ce qui ne peut pas être fait implicitement car tout le monde peut écrire une classe qui implémente IList<RoleDTO>. Vous devez donc soit faire un casting explicite, soit modifier les types pour qu'ils correspondent. Le problème est que votre code actuel n’indique nulle part qu’un IList<RoleDTO> est implicitement converti en un List<RoleDTO>. Mais voici quelques suppositions de ma part. Si UserDTO.roles est en réalité défini comme un List<RoleDTO> au lieu de IList<RoleDTO>, il suffit de changer r1 pour qu'il soit défini en tant que List<RoleDTO> ou de changer UserDTO.roles pour devenir un IList<RoleDTO>. Ce dernier serait ma préférence. Si vous affectez UserDTO.roles à une variable de type List<RoleDTO>, vous devez plutôt remplacer le type de cette variable par IList<RoleDTO>.

7
juharr

Vous déclarez rl comme IList et non comme IList<RoleDTO>

Change ça:

IList rl = new IList<RoleDTO>();

pour ça:

IList<RoleDTO> rl = new List<RoleDTO>
2
Oscar

Il vous suffit de mettre à jour le

    rl.Add(new UserDTO { roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), role = "admin" });

avec 

    rl.Add(new RoleDTO{ roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), role = "admin" });
0
Vishwajeet Bose