将类型“System.Collections.Generic.List”转换为“System.Colle
本文关键字:System 转换 string Colle List 类型 Collections Generic | 更新日期: 2023-09-27 18:31:25
在我的模型Account
中,我有这样的属性
public List<String> Roles { get; set; }
稍后我想获取该属性,但将其转换为IList<IApplicationUserRole<Role>>
,所以我有这个函数
public IList<IApplicationUserRole<Role>> Roles
{
get
{
return _account.Roles; // how do I convert this in the specific type intended.
}
}
这是我的 IApplicationUserRole
public interface IApplicationUserRole<TRoleModel> : IRole<string>
where TRoleModel : EntityModel
{
TRoleModel Role { get; set; }
String Name { get; set; }
}
我是这个东西的新手。期待任何帮助。
假设你让你的实现类是这样的:
public class ApplicationUserRole : IApplicationUserRole<T> where T : Role
{
public ApplicationUserRole()
{
}
public User User { get; set; }
public T Role { get; set; }
}
然后,你会做这样的事情:
public IList<IApplicationUserRole<Role>> Roles
{
get
{
return _account.Roles
.Select(r => new ApplicationUserRole { Role = roleService.FindRoleByName(r) })
.Cast<IApplicationUserRole<Role>>()
.ToList();
}
}
其中roleService
是从角色名称构建Role
实例的某种方法(上面是r
)
注意:话虽如此,上述实现中有一个问题。由于Roles
是一个属性,因此不应执行数据访问操作。因此,在这种情况下,您应该创建一个方法而不是一个属性。
我会从这样的东西开始:
public IList<IApplicationUserRole<Role>> Roles
{
get
{
return _account.Roles.Select(r=>
new ApplicationUserRole<Role>() {Name = r})
.Cast<IApplicationUserRole<Role>>()
.ToList();
}
}
这假设您有一个实现 IApplicationUserRole<Role>
接口的类。
正如@MartinLiversage所说,您无法直接将List<T>
转换为List<U>
,您必须手动进行转换。