这是我遇到的问题。在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
注意:不必像这样工作。任何其他建议,以更好的方式从集合中选择一个值,然后基于此基础的子类别的集合。
感谢您的帮助!
答案 0 :(得分:0)
我要将枚举更改为由单个类
表示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),或者存储在DB的某个地方(我的偏好,如果合理的话)。此外,如果你需要“子子类别”,你已经有了管道。
如果需要,您也可以制作类别sealed
,因此无法继承。