【发布时间】:2020-02-05 21:21:33
【问题描述】:
我这样做是为了可以从我的 api 返回更多基本类。
我可以使用“静态隐式运算符”语法来允许我将自定义类从一种类型转换为另一种类型,但我一次只能做一个。使用列表时如何转换自定义类型? 这是我的 Entity Framework Core 版本的课程:
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;
}
这是我想要为我的 api 响应投射列表的类的基本版本:
public class DivUser : DivBase
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTimeOffset DateCreated { get; set; }
public int CreatedByUserId { get; set; }
public DateTimeOffset LastDateModified { get; set; }
public int LastModifiedByUserId { get; set; }
public static implicit operator DivUser(DivDbUser dbUser)
{
DivUser user = new DivUser() {
Id = dbUser.Id,
Name = dbUser.Name,
Email = dbUser.Email,
DateCreated = dbUser.DateCreated,
CreatedByUserId = dbUser.CreatedByUserId,
LastDateModified = dbUser.LastDateModified,
LastModifiedByUserId = dbUser.LastModifiedByUserId
};
return user;
}
}
我可以一次施放一个,然后循环:
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();
List<DivUser> users = dbUsers.Cast<DivUser>().ToList();
但是当我尝试运行它时,出现以下转换错误:
System.InvalidCastException:'无法将'Db.Models.DivDbUser'类型的对象转换为'ApiModels.DivUser'类型。'
【问题讨论】:
标签: c# .net api asp.net-core casting