将列表<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)