我有这个枚举:
public enum Stat
{
x,
y,
z,
a,
}
我正在使用另一个枚举来表示角色:
public enum Role
{
[Display(Name = "student")]
student,
[Display(Name = "teacher")]
teacher,
[Display(Name = "employee")]
employee,
}
在我的控制器中,我有以下代码:
switch (table?.Type, table?.Stat)
{
case (Role.student, Stat.x):
case (Role.teacher, Stat.y):
case (Role.employee, Stat.z):
var stat4 = new model()
{
Stat = VM.stat,
Type = Role.student,
FormId = form.Id
};
_context.table.Add(stat4);
break;
case (Role.teacher, Stat.a):
TempData["error-message"] = Message = "error";
break;
return RedirectToAction("Index");
}
在我的控制器中的 edit
POST
方法中,我想执行每个案例一次,并且顺序必须是(x,y,z,a),所以当老师设置 y 时,他不能再设置 x 并继续。
我正在努力让 switch 语句 case 仅在其不起作用时执行,并且是 ASP.NET Core MVC 世界的新手,有人可以帮助我吗?
bool caseExecuted = false;
switch (table?.Type, table?.Stat)
{
if (!caseExecuted)
{
caseExecuted = true;
case (Role.student, Stat.x):
case (Role.teacher, Stat.y):
case (Role.employee, Stat.z):
var stat4 = new model()
{
Stat = VM.stat,
Type = Role.student,
FormId = form.Id
};
_context.table.Add(stat4);
break;
case (Role.teacher, Stat.a):
TempData["error-message"] = Message = "error";
break;
return RedirectToAction("Index");
}
}
我尝试这样做,但无论多少次它都会执行
感谢@XiangWeiHuang,它成功了! 这个想法是将枚举与 int 进行比较,我之前没有想到这一点。
所以如果将来有人需要的话,这就是答案
switch (table?.Type, (int)table?.Stat)
{
case (Role.student, (int)Stat.x):
case (Role.teacher, (int)Stat.y):
case (Role.employee, (int)Stat.z):
if ((int)VM.stat < (int?)table?.Stat)
{
var stat4 = new model()
{
Stat = VM.stat,
Type = Role.student,
FormId = form.Id
};
_context.table.Add(stat4);
}
else
{
TempData["error-message"] = Message = "you can't change back status");
return RedirectToAction("Index");
}
break;
case (Role.teacher, Stat.a):
TempData["error-message"] = Message = "error";
return RedirectToAction("Index");
}