使用枚举(构建列表)

时间:2010-09-13 12:31:36

标签: c# java enums

您可能遇到过声明某个枚举的情况,并且您想要评估某个对象以找出它满足的枚举类别,即对象可能满足将其分类为多个枚举的条件。 / p>

一个例子就是说,在一所大学里,我有各种课程,这里有参加同一课程的不同专业的学生名单。 因此我们有

public class Course
{
    int Id;
    IList<Electrical> ElectricalStudents;
    IList<Computer> ComputerStudents;
    IList<Bioengineering> BioengineeringStudents;
    IList<Mechanical> MechanicalStudents;
}

我的枚举如下

public enum ParentDepartment
{
    Electrical,
    Mechanical,
    Biology
}

对于我所拥有的每个课程对象,我需要确定学生应该使用哪些家长部门,以便我可以适当地使用它们(以便我可以邮寄那些相应的部门)

你会如何处理这种情况?什么是最好的方法。

我能想到的方法是在Course对象上有一个静态函数,其定义类似于

public static IList<ParentDepartment> GetParentDepartments(Course course)
{
    public parentDepartmentList=new List<ParentDepartment>();
    if(ElectricalStudents.Count>0)
            Add(parentDepartmentList,ParentDepartment.Electrical);
    if(ComputerStudents.Count>0)
            Add(parentDepartmentList,ParentDepartment.Electrical);
    if(MechanicalStudents.Count>0)
            Add(parentDepartmentList,ParentDepartment.Mechanical);
    if(BioengineeringStudents.Count>0)
            Add(parentDepartmentList,ParentDepartment.Biology);
}

private void Add(IList<ParentDepartment> parentDepartmentList,ParentDepartment         parentdept)
{
    if(!parentDepartmentList.Contains(parentdept))
            parentDepartmentList.Add(parentdept);
}

希望事情清楚。请注意这是一个假设的模型,请避免给我解决方案,例如更改模型。

对功能的任何改进也非常感谢。我只是不喜欢这里的事情。是否有更精简和更好的方法来处理相同的事情?

非常感谢任何答案。

P.S:很抱歉这个C#具体,但我认为这个概念可以扩展到任何语言。感谢

2 个答案:

答案 0 :(得分:4)

在.NET中,通常使用Flags enumeration

实现枚举值集
[Flags]
public enum ParentDepartments
{
    None = 0x0,
    Electrical = 0x1,
    Mechanical = 0x2,
    Biology = 0x4,
}

public static ParentDepartments GetParentDepartments(Course course)
{
    var departments = ParentDepartments.None;

    if (course.ElectricalStudents.Any())
        departments |= ParentDepartments.Electrical;

    if (course.ComputerStudents.Any())
        departments |= ParentDepartments.Electrical;

    if (course.MechanicalStudents.Any())
        departments |= ParentDepartments.Mechanical;

    if (course.BioengineeringStudents.Any())
        departments |= ParentDepartments.Biology;

    return departments;
}

答案 1 :(得分:1)

Java有EnumSet。我不能代表C#。