根据先前选择的枚举值选择枚举

本文关键字:枚举 选择 | 更新日期: 2023-09-27 18:36:50

这是我遇到的问题。将这enum对象放在public class Item

public enum Category {
    FirstCategory,
    SecondCategory,
    ThirdCategory
}

选择enum值后,我想使用它在另一个具有值名称的enum中找到子类别:

public enum FirstCategory {
    FirstCategoryA,
    FirstCategoryB,
    FirstCategoryC
}

我希望能够从这些值中设置两个属性,CategorySubcategory,但最重要的是,我想要一种简单的语法方法来首先设置 Item.Category ,并从选定的值中选择可以从哪个enum Item.Subcategory中进行选择,如下所示(伪代码):

Item item = new Item();
item.Category = Item.Category.FirstCategory; 
item.Subcategory = // enum for subcategory choices based on item.Category value

注意:根本不需要像这样工作。任何其他建议,以更好的方法从集合中选择一个值,然后基于此将集合作为子类别的基础。

感谢您的帮助!

根据先前选择的枚举值选择枚举

我会将枚举更改为由单个类表示

public class Category
{
  public string CategoryName {get; set;}
  public List<Category> SubCategories {get; set;}
}

然后像这样使用它:

  var availableCategories = new List<Category>
            {
                new Category
                    {
                        CategoryName = "FirstCategory",
                        SubCategories = new List<Category>()
                            {
                                new Category {CategoryName = "FirstCategoryA"},
                                new Category {CategoryName = "FirstCategoryB"},
                                new Category {CategoryName = "FirstCategoryC"}
                            }
                    },
                new Category
                    {
                        CategoryName = "SecondCategory",
                        SubCategories = new List<Category>()
                            {
                                new Category {CategoryName = "SecondCategoryA"},
                                new Category {CategoryName = "SecondCategoryB"},
                                new Category {CategoryName = "SecondCategoryC"}
                            }
                    }
            };
        var availableCategoryNames = availableCategories.Select(a => a.CategoryName);
        var selectedCategory = availableCategoryNames.First();
        var availableSubCategories = availableCategories.Where(a => a.CategoryName == selectedCategory)
                                                        .SelectMany(c => c.SubCategories)
                                                        .Select(s => s.CategoryName);

显然,您希望更改选择类别的方式,但这应该会给您一个大致的想法。

您可以根据需要填充类别 - 硬编码(yuck),某些资源文件(meh)或存储在某处的数据库中(如果合理的话,我的偏好)。 此外,如果您需要"子类别",那么您已经准备好了管道。

如果需要,也可以使 Category 类sealed,因此无法继承它。