无法将类型'System.Collections.IList'隐式转换为'System.Collections.Generic.List

Ger*_*hes 9 .net c# generics

这是我遇到的错误

错误1无法将类型隐式转换System.Collections.Generic.IList<Model.DTO.RoleDTO>System.Collections.Generic.List<Model.DTO.RoleDTO>.存在显式转换(您是否错过了演员?)

我的代码:

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 = "administrator@email.com",
                role = rl
             };
Run Code Online (Sandbox Code Playgroud)

而型号:

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; }
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

juh*_*arr 10

只是改变r1IList<RoleDTO>.

IList<RoleDTO> rl = new List<RoleDTO>();
Run Code Online (Sandbox Code Playgroud)

您不能混合泛型和非泛型列表,因为IList<T>它不会继承IList,List<T>也不会从中继承List,也不会实现IList.

编辑

基于新的错误你有这意味着什么地方你正尝试将转换IList<RoleDTO>到一个List<RoleDTO>不能被隐式进行,因为任何人都可以写一个实现类IList<RoleDTO>.因此,您需要进行显式转换,或更改要匹配的类型.问题是你的当前代码没有显示a IList<RoleDTO>被隐式转换为a的任何地方List<RoleDTO>.但这是我的一些猜测.如果UserDTO.roles实际上被定义为a List<RoleDTO>而不是IList<RoleDTO>那么只需将更改r1定义为a List<RoleDTO>或更改UserDTO.roles为a IList<RoleDTO>.后者是我的偏好.如果要分配UserDTO.roles类型变量,List<RoleDTO>则应更改该变量的类型IList<RoleDTO>.