将列表<DTO?> 转换为列表<DTO>
Convert List<DTO?> to List<DTO>
我想将 List 转换为 List
List<DTO?> items = new List<DTO?>();
List<DTO> notNullItems = items.Where(c=>c!=null).ToList();
但是不行!
与目标类型不匹配
你可以尝试使用Select
Value
属性因为当你只使用Where
时类型可能不匹配,类型仍然是DTO?
可空类型。
List<DTO> notNullItems = items.Where(c=>c!=null)
.Select(x => x.Value).ToList();
正如@Jeroen Mostert 评论的那样,如果您的类型不可为空,Cast
可能更合适。
List<DTO> notNullItems = items.Where(c=>c!=null)
.Cast<DTO>.ToList();
您可以使用 null-forgiving operator (!
) 的替代方法。
如果在 .ToList()
之后添加 !
,C# 编译器就会知道它不是空的:
List<DTO> notNullItems = items.Where(c => c != null).ToList()!;
这将比 .Cast<DTO>()
具有更好的性能,因为它不调用方法。但我们这里说的可能是纳秒。
请注意,这仅适用于 类。如果您使用 Nullable<T>,则必须使用 .Select(c => c.Value)
。
我想将 List
List<DTO?> items = new List<DTO?>();
List<DTO> notNullItems = items.Where(c=>c!=null).ToList();
但是不行!
与目标类型不匹配
你可以尝试使用Select
Value
属性因为当你只使用Where
时类型可能不匹配,类型仍然是DTO?
可空类型。
List<DTO> notNullItems = items.Where(c=>c!=null)
.Select(x => x.Value).ToList();
正如@Jeroen Mostert 评论的那样,如果您的类型不可为空,Cast
可能更合适。
List<DTO> notNullItems = items.Where(c=>c!=null)
.Cast<DTO>.ToList();
您可以使用 null-forgiving operator (!
) 的替代方法。
如果在 .ToList()
之后添加 !
,C# 编译器就会知道它不是空的:
List<DTO> notNullItems = items.Where(c => c != null).ToList()!;
这将比 .Cast<DTO>()
具有更好的性能,因为它不调用方法。但我们这里说的可能是纳秒。
请注意,这仅适用于 类。如果您使用 Nullable<T>,则必须使用 .Select(c => c.Value)
。