Csharp 将所有缺失枚举的对象添加到 List

我有一个场景,其中我有一个返回List<CategoriesDto>的方法,我需要确保它包含CategoriesEnum中提到的所有类别的列表.如果列表中缺少任何类别,我们必须添加它们.

示例代码

Class#

public class CategoriesDto
{
    public CategoriesEnum Name { get; set; }
    public bool Enabled { get; set; } = false;
}

Enum#

public enum CategoriesEnum
{
    TV,
    AC,
    Car,
    Fridge
}

Case#

让我们假设下面是我们的List<CategoriesDto>

var categoriesList = new List<CategoriesDto>
    {
        new()
        {
            Name = CategoriesEnum.TV,
            Enabled = true,
        },
        new()
        {
            Name = CategoriesEnum.AC,
            Enabled = true,
        }
    };

在这种情况下,该方法将判断来自ENUM CategoriesEnum的缺失对象(在这种情况下(Car, Fridge)).它会将它们添加到列表categoriesList中,其中Enabled属性的缺省值为false.

推荐答案

您可以使用Enum.GetValues<TEnum>来获取枚举值,然后在顶部使用一些LINQ.例如:

var missing = Enum.GetValues<CategoriesEnum>()
    .Except(categoriesList.Select(dto => dto.Name))
    .Select(e => new CategoriesDto
    {
        Name = e
    });

categoriesList.AddRange(missing);

Csharp相关问答推荐

我们应该如何在IHostedService中使用按请求的GbContent实例?

错误NU 1301:无法加载源的服务索引

在Dapper中使用IasyncEum重写GetAsyncEum方法

如何创建ASP.NET Core主机并在同一进程中运行请求

. NET Core DB vs JSON模型设计

Unity 2D自顶向下弓旋转

实体框架核心上是否支持使用NPGSQL的字符串聚合?

Azure Redis缓存与Entra ID身份验证

Amazon SP-API确认发货不设置&Quot;递送服务

C#无法让WinForm进度条生成动画错误跨线程操作无效

ASP.NET核心MVC SqlException:违反主键约束';PK_USER';.无法在对象';数据库中插入重复的密钥.用户';

在EF Core中,有没有什么方法可以防止在查询中写入相同的条件,而代之以表达式?

如何在ASP.NET Core8中启用REST应用程序的序列化?

依赖项注入、工厂方法和处置困境

实体框架-IsRequired()与OnDelete()

ASP.NET MVC数据批注验证组复选框

序列化过程中的死循环

在平行内使用跨度.用于循环

如何在ASP.NET Core 8中获取键控服务词典

.NET6最小API:操作.MapGet之后的响应