这是我遇到的错误
错误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
};
模特:
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; }
}
}
我该如何正确地做到这一点?
答案 0 :(得分:8)
只需将r1
更改为IList<RoleDTO>
。
IList<RoleDTO> rl = new List<RoleDTO>();
您不能混合使用通用列表和非通用列表,因为IList<T>
不会从IList
继承而List<T>
不会从List
继承并且不会实现IList
修改强>
根据您遇到的新错误,这意味着您尝试将IList<RoleDTO>
转换为List<RoleDTO>
的某个地方无法隐式执行,因为任何人都可以编写实现{{1}的类}。因此,您需要进行显式转换,或更改要匹配的类型。问题是您的当前代码不会显示IList<RoleDTO>
被隐式转换为IList<RoleDTO>
的任何位置。但这是我的一些猜测。如果List<RoleDTO>
实际上定义为UserDTO.roles
而不是List<RoleDTO>
,则只需将IList<RoleDTO>
更改为r1
或将List<RoleDTO>
更改为UserDTO.roles
一个IList<RoleDTO>
。后者是我的偏好。如果您要将UserDTO.roles
分配给List<RoleDTO>
类型的变量,则应将该变量的类型更改为IList<RoleDTO>
。
答案 1 :(得分:2)
您将rl声明为IList
,而不是IList<RoleDTO>
改变这个:
IList rl = new IList<RoleDTO>();
为此:
IList<RoleDTO> rl = new List<RoleDTO>
答案 2 :(得分:0)
您只需要更新
即可 rl.Add(new UserDTO { roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), role = "admin" });
带
rl.Add(new RoleDTO{ roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), role = "admin" });