使用枚举的对象c#

问题描述:

对不起,我是相当新的枚举,我试图在逻辑上下文中实现它。在我的Employee类中,我创建了一些员工对象。我还为Employee对象分配状态创建了一个枚举。我的目标是创建一个员工列表,并为每个员工分配一个分配状态,最后通过列表打印员工数据和员工分配状态。使用枚举的对象c#

我想知道:

1 - 这是一个很好的情况下使用枚举? 2 - 如何为每个员工分配工作分配状态?例如,如果我想Emp1有AssignmentStatus.Assigned我应该如何应用此语法明智?

public class Employee 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public bool IsCurrentlyEmployed { get; set; } 


     enum AssignmentStatus 
     { 
      Assigned, 
      Idle, 
      Trainee, 
      NotDefined 
     } 


     public Employee(int id, string firstName, string lastName, bool isCurrentlyEmployed) 
     { 
      Id = id; 
      FirstName = firstName; 
      LastName = lastName; 
      IsCurrentlyEmployed = IsCurrentlyEmployed; 

     } 


     public Employee Employees() 
     { 

      Employee Emp1 = new Employee(1, "John", "Smith", true); 
      Employee Emp2 = new Employee(2, "Kevin", "Moore", true); 
      Employee Emp3 = new Employee(3, "Eric", "Johnson", false); 
      Employee Emp4 = new Employee(4, "Michell", "McDevour", true); 
      Employee Emp5 = new Employee(5, "Henry", "Jones", true); 
      Employee Emp6 = new Employee(6, "Sarah", "Holmes", true); 





      List<Employee> listEmployees = new List<Employee>(); 


     } 

Thnk你

+0

请张贴一些代码给我们审查和展示一些更多的研究。 – krisdyson 2014-09-22 09:13:02

+0

我的appologies,似乎我没有发布的代码。 – koffe14 2014-09-22 09:14:50

+0

你定义了一个'enum'类型,但你也必须实际使用它。添加一个'AssignmentStatus'类型的属性。顺便说一句,在.NET中,也可以调用该属性AssignmentStatus。 – 2014-09-22 09:17:36

1 - 这是一个很好的情况下使用枚举?

当然

2 - 如何分配与分配状态每位员工?

您需要公开AssignmentStatus类型的公共财产或创建一个构造函数来做到这一点

例如:

public class Employee 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public bool IsCurrentlyEmployed { get; set; } 
    public AssignmentStatus Status { get; set; } 

    enum AssignmentStatus 
    { 
     Assigned, 
     Idle, 
     Trainee, 
     NotDefined 
    } 

    public Employee(int id, string firstName, string lastName, bool isCurrentlyEmployed, AssignmentStatus assignmentStatus) 
    { 
     Id = id; 
     FirstName = firstName; 
     LastName = lastName; 
     IsCurrentlyEmployed = IsCurrentlyEmployed; 
     this.Status = assignmentStatus; 
    } 

    public List<Employee> Employees() 
    { 
     Employee Emp1 = new Employee(1, "John", "Smith", true, AssignmentStatus.Assigned); 
     Employee Emp2 = new Employee(2, "Kevin", "Moore", true, AssignmentStatus.Assigned); 
     Employee Emp3 = new Employee(3, "Eric", "Johnson", false, AssignmentStatus.Assigned); 
     Employee Emp4 = new Employee(4, "Michell", "McDevour", true, AssignmentStatus.Assigned); 
     Employee Emp5 = new Employee(5, "Henry", "Jones", true, AssignmentStatus.Assigned); 
     Employee Emp6 = new Employee(6, "Sarah", "Holmes", true, AssignmentStatus.Assigned); 

     List<Employee> listEmployees = new List<Employee>(); 

     listEmployees.Add(Emp1); 
     listEmployees.Add(Emp2); 
     listEmployees.Add(Emp3); 
     listEmployees.Add(Emp4); 
     listEmployees.Add(Emp5); 
     listEmployees.Add(Emp6); 

     return listEmployees; 
    } 

我太固定的Employees()方法。虽然我不建议在Employee这个类中放置这样的代码,因为它没有逻辑意义,但为什么Employee要维护一个Employees的列表?

然后,您可以设置像这样的状态:

Employee e = new Employee(0, "", "", false, Employee.AssignmentStatus.Assigned); 

或者

e.Status = Employee.AssignmentStatus.Assigned; 
+0

现在Employees()返回一个空的列表 – Pavenhimself 2014-09-22 09:22:17

+0

@Pavenhimself比之前编译的更好。 – DGibbs 2014-09-22 09:25:05

+0

的确如此。看起来不错 – Pavenhimself 2014-09-22 09:25:31

  1. 是的,这是用枚举
  2. 您需要状态的属性可以设置它为每个员工

    公众的好方案AssignmentStatus状态{get;组; }

您应该使用枚举

public class Employee 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public bool IsCurrentlyEmployed { get; set; } 
    public AssignmentStatus EmployeeAssignmentStatus { get; set; } 


    enum AssignmentStatus 
    { 
     Assigned, 
     Idle, 
     Trainee, 
     NotDefined 
    } 


    public Employee(int id, string firstName, string lastName, bool isCurrentlyEmployed, AssignmentStatus status) 
    { 
     Id = id; 
     FirstName = firstName; 
     LastName = lastName; 
     IsCurrentlyEmployed = IsCurrentlyEmployed; 
     EmployeeAssignmentStatus = status; 
    } 


    public List<Employee> Employees() 
    { 

     Employee Emp1 = new Employee(1, "John", "Smith", true, AssignmentStatus.Assigned); 
     Employee Emp2 = new Employee(2, "Kevin", "Moore", true, AssignmentStatus.Idle); 
     Employee Emp3 = new Employee(3, "Eric", "Johnson", false, AssignmentStatus.Trainee); 
     Employee Emp4 = new Employee(4, "Michell", "McDevour", true, AssignmentStatus.NotDefined); 
     Employee Emp5 = new Employee(5, "Henry", "Jones", true, AssignmentStatus.NotDefined); 
     Employee Emp6 = new Employee(6, "Sarah", "Holmes", true, AssignmentStatus.NotDefined)); 

     List<Employee> listEmployees = new List<Employee>(); 

     listEmployees.add(Emp1); 
     listEmployees.add(Emp2); 
     listEmployees.add(Emp3); 
     listEmployees.add(Emp4); 
     listEmployees.add(Emp5); 
     listEmployees.add(Emp6); 

     return listEmployees; 

    } 

我已经收拾你的代码,并显示如何分配分配状态。 你会在代码中找到解释更多的评论。

public class Employee 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public bool IsCurrentlyEmployed { get; set; } 
    public eAssignmentStatus AssignmentStatus { get; set; } 

    /// <summary> 
    /// Defines the assignment status for the employee. Prefixed 'e' to denote it's an enum and avoid *es with the property name. 
    /// </summary> 
    public enum eAssignmentStatus 
    { 
     NotDefined, 
     Assigned, 
     Idle, 
     Trainee 
    } 

    /// <summary> 
    /// Main constructor 
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="firstName"></param> 
    /// <param name="lastName"></param> 
    /// <param name="isCurrentlyEmployed"></param> 
    public Employee(int id, string firstName, string lastName, bool isCurrentlyEmployed) 
    { 
     Id = id; 
     FirstName = firstName; 
     LastName = lastName; 
     IsCurrentlyEmployed = IsCurrentlyEmployed; 
    } 

    /// <summary> 
    /// Constructor overload with eAssignmentStatus parameter 
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="firstName"></param> 
    /// <param name="lastName"></param> 
    /// <param name="isCurrentlyEmployed"></param> 
    /// <param name="assignmentStatus"></param> 
    public Employee(int id, string firstName, string lastName, bool isCurrentlyEmployed, eAssignmentStatus assignmentStatus) 
     : this(id, firstName, lastName, isCurrentlyEmployed) 
    { 
     AssignmentStatus = assignmentStatus; 
    } 

    /// <summary> 
    /// Creates some employee objects, however, I would recommend putting this method inside another 'Factory' class, as you'd have to create 
    /// an instance of Employee in order to call "Employees()" 
    /// </summary> 
    /// <returns>Now returns a list as this is what your method name implies.</returns> 
    public List<Employee> Employees() 
    { 
     Employee Emp1 = new Employee(1, "John", "Smith", true, eAssignmentStatus.Assigned); 
     Employee Emp2 = new Employee(2, "Kevin", "Moore", true, eAssignmentStatus.Idle); 
     Employee Emp3 = new Employee(3, "Eric", "Johnson", false, eAssignmentStatus.Trainee); 
     Employee Emp4 = new Employee(4, "Michell", "McDevour", true); 
     Employee Emp5 = new Employee(5, "Henry", "Jones", true); 
     Employee Emp6 = new Employee(6, "Sarah", "Holmes", true); 

     List<Employee> listEmployees = new List<Employee>(); 

     return listEmployees; 
    } 
} 
+0

我知道我应该按照你的建议将enum设置为public。谢谢 – koffe14 2014-09-22 09:33:32