it-swarm.com.de

Der Typ 'System.Collections.IList' kann nicht implizit in 'System.Collections.Generic.List' konvertiert werden

Dies ist der Fehler, dem ich begegne

Fehler 1 Der Typ System.Collections.Generic.IList<Model.DTO.RoleDTO> kann nicht implizit in System.Collections.Generic.List<Model.DTO.RoleDTO> konvertiert werden. Eine explizite Konvertierung ist vorhanden (fehlt eine Besetzung?) 

Mein 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
             };

Und das Modell:

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; }
    }
}

Wie mache ich das richtig? 

4
Gerald Hughes

Ändern Sie einfach r1 in IList<RoleDTO>.

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

Sie können keine generischen und nicht generischen Listen kombinieren, da IList<T> nicht von IList erbt und List<T> nicht von List erbt und IList nicht implementiert.

EDIT

Aufgrund des neuen Fehlers bedeutet dies, dass Sie irgendwo versuchen, einen IList<RoleDTO> in einen List<RoleDTO> zu konvertieren. Dies kann nicht implizit erfolgen, da jeder eine Klasse schreiben könnte, die IList<RoleDTO> implementiert. Sie müssen also entweder eine explizite Besetzung durchführen oder die Typen entsprechend anpassen. Das Problem ist, dass Ihr aktueller Code nirgends anzeigt, dass ein IList<RoleDTO> implizit in einen List<RoleDTO> konvertiert wird. Aber hier sind einige Vermutungen von meiner Seite. Wenn UserDTO.roles tatsächlich als List<RoleDTO> anstelle von IList<RoleDTO> definiert ist, ändern Sie einfach r1 in List<RoleDTO> oder UserDTO.roles in IList<RoleDTO>. Letzteres wäre meine Präferenz. Wenn Sie UserDTO.roles einer Variablen vom Typ List<RoleDTO> zuweisen, sollten Sie stattdessen den Typ dieser Variablen in IList<RoleDTO> ändern.

7
juharr

Sie deklarieren rl als IList, nicht als IList<RoleDTO>

Ändere das:

IList rl = new IList<RoleDTO>();

dafür:

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

Sie müssen nur das aktualisieren

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

mit 

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