您可能遇到过这样的情况,您声明了某个枚举,并且想要评估某个对象以找出它满足哪些枚举类别,即一个对象可能满足将其分类为多个枚举的条件。
举个例子,假设在一所大学里我有不同的类(class),并且有来自不同专业的参加相同类(class)的学生名单。 于是我们有
public class Course
{
int Id;
IList<Electrical> ElectricalStudents;
IList<Computer> ComputerStudents;
IList<Bioengineering> BioengineeringStudents;
IList<Mechanical> MechanicalStudents;
}
我的枚举如下
public enum ParentDepartment
{
Electrical,
Mechanical,
Biology
}
对于我拥有的每个类(class)对象,我都需要确定学生所属的父部门,以便我可以适本地使用它们(以便我可以邮寄那些各自的部门)
你会如何处理这种情况?实现相同目标的最佳方法是什么。
我能想到的方法是在 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# 变得特定,但我认为这个概念可以扩展到任何语言。谢谢
最佳答案
在 .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;
}
关于c# - 使用枚举(构建列表),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3700370/