错误:类型名称“X”不存在于类型“Y”中

Posted

技术标签:

【中文标题】错误:类型名称“X”不存在于类型“Y”中【英文标题】:Error: The type name 'X' does not exist in the type 'Y' 【发布时间】:2022-01-10 08:27:03 【问题描述】:

我遇到了这个问题

类型名称“RoomStayVmNew”不存在于类型“HotelVmNew.HotelRoomVmNew”中

但我是我的视图模型,

public class HotelVmNew: IMapFrom<Domain.Entities.Hotel> 

    public IEnumerable<HotelRoomVmNew> Rooms  get; set;  = new List<HotelRoomVmNew>();


public class HotelRoomVmNew: IMapFrom<Domain.Entities.HotelRoom> 

    public IEnumerable<RoomStayVmNew> Stays  get; set;  = new List<RoomStayVmNew>(); 


public class RoomStayVmNew: IMapFrom<Domain.Entities.RoomStay> 

    public IEnumerable<RoomStayFacilityVm> Facilities  get; set;  = new List<RoomStayFacilityVm>();

var hotel = await _context.Hotels
  .Where(i => i.Code == request.Code)
  .Select(i => new HotelVmNew 
    Code = i.Code,
      Rooms = i.Rooms.Select(i => new HotelVmNew.HotelRoomVmNew 
        Id = i.Id,
          Stays = i.Stays.Select(x => new HotelVmNew.HotelRoomVmNew.RoomStayVmNew ),

      )
  )

当我选择HotelRoomVmNew 时出现以下错误:

类型中不存在类型名称“RoomStayVmNew” 'HotelVmNew.HotelRoomVmNew'。

为什么会出现这个错误?

【问题讨论】:

你能添加调用堆栈吗? 【参考方案1】:
 new HotelVmNew.HotelRoomVmNew.RoomStayVmNew 

应该是

new RoomStayVmNew 

而且你只需要这样做,因为你的类定义已经在通过初始化程序初始化一个新的 List 构造,但我猜你刚刚截断了初始化对于每个 Stay 实例。

此声明:

new HotelVmNew.HotelRoomVmNew.RoomStayVmNew 

表示希望 HotelRoomVmNew 的定义存在于 HotelVmNew 中,而 RoomStayVmNew 的定义存在于 HotelRoomVmNew 中。

例如:

public class HotelVmNew: IMapFrom<Domain.Entities.Hotel> 

    public IEnumerable<HotelRoomVmNew> Rooms  get; set;  = new List<HotelRoomVmNew>();

    public class HotelRoomVmNew: IMapFrom<Domain.Entities.HotelRoom> 
    
        public IEnumerable<RoomStayVmNew> Stays  get; set;  = new List<RoomStayVmNew>(); 


        public class RoomStayVmNew: IMapFrom<Domain.Entities.RoomStay> 
        
            public IEnumerable<RoomStayFacilityVm> Facilities  get; set;  = new List<RoomStayFacilityVm>();
        
    

请注意,类在其父级范围内定义。您当然可以这样设置,但它会不断地要求您完全扩展类名以获取依赖类定义。除非您真的想明确类的所有权,否则我想不出任何好的理由这样做。

【讨论】:

以上是关于错误:类型名称“X”不存在于类型“Y”中的主要内容,如果未能解决你的问题,请参考以下文章

错误“名称空间'System.Web'中不存在类型或名称空间名称'Script'”背后是不是有解释

错误 CS0234 名称空间“MvvmCross”中不存在类型或名称空间名称“Platforms”(您是不是缺少程序集引用?)

Typescript 未检测到声明“d.ts”文件中不存在的类型名称的错误

错误 CS0234:命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”(您是不是缺少程序集引用?)

命名空间“System.Web.Mvc”中不存在类型或命名空间名称

错误 CS0234:命名空间“UnityEditor”中不存在类型或命名空间名称“iOS”。您是不是缺少程序集参考?