2010-09-13 2 views
3

Возможно, вы столкнулись с ситуациями, в которых вы объявляете определенное перечисление, и вы хотите оценить определенный объект, чтобы узнать, какие категории перечислений он удовлетворяет, то есть объект может удовлетворять условиям, классифицируется более чем на один перечислитель.Работа с перечислениями (создание списка)

Примером может служить, скажем, в университете, у меня есть различные курсы, и у этого есть список студентов, посещающих различные специализации, посещающие то же самое. Таким образом, мы имеем

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

и мое перечисление следующим образом

public enum ParentDepartment 
{ 
    Electrical, 
    Mechanical, 
    Biology 
} 

и для каждого объекта, конечно, у меня есть мне нужно определить, какие parentdepartments студенты попадают в так что я могу использовать их соответствующим образом (так что я могу отправить эти отделы)

Как бы вы справились с таким делом? Каков наилучший способ сделать то же самое.

Путь я могу думать, иметь статическую функцию на объект курса что-то, чье определение как этот

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#, но я думаю, что эта концепция может быть расширена на любой язык. Спасибо

ответ

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; 
} 
+0

приятно мне это нравится .. знаю об этом. Благодарю. даст другим возможность ответить, а затем выберет ответ. – Baz1nga

+0

не имеет необходимости? – Baz1nga

+1

Настоятельно рекомендуется иметь значение 0 в перечислении. «Однако мы настоятельно рекомендуем, чтобы перечисление содержало константу со значением 0.» http://msdn.microsoft.com/en-us/library/sbbt4032.aspx – asawyer

1

Java имеет EnumSet. Я не могу говорить за C#.

+0

моей реализации находится в C#. будет google то же самое. Благодарю. – Baz1nga

+0

Тогда я не знаю, почему в этом вопросе есть Java-тег. – EJP

+0

надеюсь, что вы поймете, что у вас может быть аналогичный случай реализации в java справа, и, как вы указали, это может быть достигнуто с использованием ключевого слова в java .. я не помечу ответам, основанным на первой сперме, прежде всего, к сожалению. Я смотрю на различные ответы а затем пометить их, если это то, что вас огорчает. – Baz1nga

Смежные вопросы