方法:無法執行正確的操作
- 員工的名單
- 每個員工都有一個技能,可以包含若干個技能
- 技能集是從枚舉派生
- 我想能夠有一個循環讀取枚舉,如果它們包含適當的技能它出來的循環
代碼
bool success = false;
foreach (Employee emp in employees)
{
while (emp.Busy != true || success == true)
{
if (emp.Busy == false && emp.Skills.ToString() == _skillRequired.ToString() && success == false)
{
emp.EmployeeWorkload = _jobName;
emp.ShiftsLeft = _shiftsLeft;
emp.Busy = true;
success = true;
}
else if (emp.Busy == true)
{
MessageBox.Show("Sorry there is no one available for this job");
}
問題
[Flags]
public enum MemberSkills { None = 0, CSharp = 1 << 0, SQL = 1 << 1, PHP = 1 << 2, Javascript = 1 << 3, Web = 1 << 4, Python = 1 << 5, Oracle = 1 << 6, CPlus = 1 << 7, Perl = 1 << 8 };
Employee e1 = new Employee(MemberJob.Employee, "Name", MemberSkills.CPlus | MemberSkills.CSharp, false);
Employee e2 = new Employee(MemberJob.Employee, "Another Name", MemberSkills.CSharp, false);
因爲對象包含一個或多個MemberSkills
,if語句讀取對象「CSHARP | CPlus」,不能正確地執行該方法。在他們的技能而不是選擇與CSHARP僱員。見e2
爲什麼定義你的枚舉,當你使用左移操作?以前從未見過。 –
@Steffen我以前見過......一件事,它似乎比乘以2稍微少一點錯誤(「1 << 3」是8,「1 << 4」是16等) 。不知道這是唯一的好處。 –
@SteffenWinkler過去一位明智的評論者在這個網站上這樣列舉了一個枚舉,我複製它,因爲它看起來更有效,儘管它內部只有32個枚舉看起來不太容易出錯。你能想出一個更好的枚舉枚舉方法嗎? –