C# C“使用”铸造;静态隐式运算符“;问题

C# C“使用”铸造;静态隐式运算符“;问题,c#,.net,api,asp.net-core,casting,C#,.net,Api,Asp.net Core,Casting,我这样做是为了从api返回更多的基本类 我可以使用“静态隐式运算符”语法将自定义类从一种类型转换为另一种类型,但一次只能转换一种类型。使用列表时如何强制转换自定义类型? 下面是我的实体框架类的核心版本: public class DivDbUser : DivDbBase, IDivDbTrackable { [Required] [MaxLength(256)] public string Name { get; set; } [Required] [

我这样做是为了从api返回更多的基本类

我可以使用“静态隐式运算符”语法将自定义类从一种类型转换为另一种类型,但一次只能转换一种类型。使用列表时如何强制转换自定义类型? 下面是我的实体框架类的核心版本:

public class DivDbUser : DivDbBase, IDivDbTrackable
{
    [Required]
    [MaxLength(256)]
    public string Name { get; set; }

    [Required]
    [MaxLength(256)]
    public string Email { get; set; }

    [Key]
    public int Id { get; set; }

    [Required]
    public DateTimeOffset DateCreated { get; set; }

    public int CreatedByUserId { get; set; }

    [Required]
    public DateTimeOffset LastDateModified { get; set; }

    public int LastModifiedByUserId { get; set; }

    [ForeignKey("CreatedByUserId")]
    public DivDbUser CreatedByUser { get; set; }

    [ForeignKey("LastModifiedByUserId")]
    public DivDbUser LastModifiedByUser { get; set; }

    public ICollection<DivDbResourceAssignment> ResourceAssignments { get; set; }
    public ICollection<DivDbUserRole> UserRoles { get; set;
}
我可以一次投一个,然后循环:

        dbUsers = mContext.Users.ToList();
        List<DivUser> users = new List<DivUser>();
        foreach(DivDbUser dbUser2 in dbUsers)
        {
            DivUser user = dbUser2;
            users.Add(user);
        }
dbUsers=mContext.Users.ToList();
列表用户=新列表();
foreach(dbUsers中的DivDbUser dbUser2)
{
DivUser=dbUser2;
用户。添加(用户);
}
但我想这样做:

dbUsers = mContext.Users.ToList();
List<DivUser> users = dbUsers.Cast<DivUser>().ToList();
dbUsers=mContext.Users.ToList();
List users=dbUsers.Cast().ToList();
但是,当我尝试运行它时,会出现以下铸造错误:

System.InvalidCastException:'无法将类型为'Db.Models.DivDbUser'的对象强制转换为类型为'ApiModels.DivUser'


转换不是强制转换,尽管语法相同,所以这不起作用

通过转换,您正在创建一个完整的新对象,而强制转换只是更改现有对象的数据类型

尝试在
选择中转换每一个:

dbUsers = mContext.Users.ToList();
List<DivUser> users = dbUsers.Select(u => (DivUser)u).ToList();
dbUsers=mContext.Users.ToList();
List users=dbUsers.Select(u=>(DivUser)u.ToList();

就这样,非常感谢!!我会尽快选择你的答案!不严格地说,转换会改变运行时类型,通常意味着信息丢失;强制转换会更改编译时类型,并且不会导致信息丢失。
dbUsers = mContext.Users.ToList();
List<DivUser> users = dbUsers.Select(u => (DivUser)u).ToList();