将类型“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; }
}

我是这个东西的新手。期待任何帮助。

将类型“System.Collections.Generic.List<string>”转换为“System.Colle

假设你让你的实现类是这样的:

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>,您必须手动进行转换。

相关文章: