C'est l'erreur que je rencontre
Erreur 1 Impossible de convertir implicitement le type
System.Collections.Generic.IList<Model.DTO.RoleDTO>
enSystem.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?
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>
.
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>
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" });