c# - 使用枚举(构建列表)

标签 c# java enums

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

举个例子,假设在一所大学里我有不同的类(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/

相关文章:

c# - Windows Phone 模拟器未启动

java - 如何配置自定义maven项目结构

java - 当我们只给出 1 个参数值时,如何获取某个枚举实例?

scala - 在 Scala 中创建星期几枚举的​​简洁方法

c# - Moq SetupSequence 不起作用

c# - 使用 Windows 窗体将文件上传到 ASP.NET Web 服务 (ASMX)

c# - 使用 TPL 的推测执行

java - 在java中从客户端向服务器发送字符串时出现问题

Java 在泛型类型参数中使用关系

vb.net - 如何将枚举添加到列表中