1

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

public enum Category {
    FirstCategory,
    SecondCategory,
    ThirdCategory
}

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

public enum FirstCategory {
    FirstCategoryA,
    FirstCategoryB,
    FirstCategoryC
}

我希望能够从这些值中设置两个属性Category和代码):SubcategoryItem.CategoryenumItem.Subcategory

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

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

谢谢你的帮助!

4

1 回答 1

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) 或存储在某处的数据库中(我的偏好,如果合理的话)。此外,如果您需要“子子类别”,您已经准备好管道。

如果你愿意,你也可以创建你的 Category 类sealed,所以它不能被继承。

于 2013-10-24T18:36:42.447 回答