您可能遇到过声明某个枚举的情况,并且您想要评估某个对象以找出它满足的枚举类别,即对象可能满足将其分类为多个枚举的条件。 / 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#具体,但我认为这个概念可以扩展到任何语言。感谢
答案 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#。