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

时间:2013-10-24 18:08:42

标签: c# enums

这是我遇到的问题。在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

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

感谢您的帮助!

1 个答案:

答案 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,因此无法继承。