【问题标题】:Using enums with objects c#将枚举与对象 c#
【发布时间】:2014-09-22 09:09:42
【问题描述】:

对不起,我对枚举很陌生,我正在尝试在逻辑上下文中实现它。在我的 Employee 类中,我创建了一些员工对象。我还为 Employee 对象分配状态创建了一个枚举。我的目标是创建一个员工列表,并为每个员工分配一个分配状态,最后遍历一个列表,打印出员工数据和员工分配状态。

我想知道:

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>();


        }

谢谢

【问题讨论】:

  • 请发布一些代码供我们审查并展示更多研究。
  • 我的道歉,似乎我没有发布代码。
  • 您定义了一个enum 类型,但您还必须实际使用它。添加AssignmentStatus 类型的属性。顺便说一句,在 .NET 中也可以调用该属性 AssignmentStatus。
  • @KrisVandermotten " 也可以调用该属性 AssignmentStatus" - 但只有在枚举定义在类之外时才有可能。
  • @MatthewWatson 确实。

标签: c# .net oop enums


【解决方案1】:

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;

【讨论】:

  • 现在Employees() 返回一个空列表
  • @Pavenhimself 比不像以前那样编译要好。
  • 这确实很明显,添加了一个AssignmentStatus类型的属性。你的权利,员工名单应该放在其他地方,我只是想确保它有效。谢谢
【解决方案2】:
  1. 是的,这是使用枚举的好场景
  2. 您需要一个 Status 属性才能为每个员工设置它

    公共AssignmentStatus状态{get;放; }

【讨论】:

    【解决方案3】:

    我已经为您整理了代码并展示了如何分配分配状态。 您会发现代码中的 cmets 可以进一步解释。

    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 clashes 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;
        }
    }
    

    【讨论】:

    • 我知道我应该按照您的建议将枚举设置为公开。谢谢
    【解决方案4】:

    你应该使用枚举

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-12
      • 1970-01-01
      • 2012-04-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2016-07-03
      相关资源
      最近更新 更多