根据先前选择的枚举值选择枚举
本文关键字:枚举 选择 | 更新日期: 2023-09-27 18:36:50
这是我遇到的问题。将这enum
对象放在public class Item
:
public enum Category {
FirstCategory,
SecondCategory,
ThirdCategory
}
选择enum
值后,我想使用它在另一个具有值名称的enum
中找到子类别:
public enum FirstCategory {
FirstCategoryA,
FirstCategoryB,
FirstCategoryC
}
我希望能够从这些值中设置两个属性,Category
和 Subcategory
,但最重要的是,我想要一种简单的语法方法来首先设置 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
,因此无法继承它。