您能否告诉我如何将switch
与下面提到的代码段一起使用?
if (IsSelectedOrganizer)
{
//
}
else if (IsNewOrganizer && IsOrganizerUserAlreadyExist)
{
//
}
else if (IsNewOrganizer && !IsOrganizerUserAlreadyExist)
{
//
}
else
{
//
}
但在Javascript
我们可以执行此操作,如下所示。但C#
它不允许?它说A constant value is expected
switch (true) {
case IsSelectedOrganizer:
//
break;
case IsNewOrganizer && IsOrganizerUserAlreadyExist:
//
break;
case IsNewOrganizer && !IsOrganizerUserAlreadyExist:
//
break;
}
答案 0 :(得分:7)
if
不是switch
的完美用例,所以我建议保留它。但你可以稍微改进一下:
if (IsSelectedOrganizer)
{
//
}
else if (IsNewOrganizer)
{
if (IsOrganizerUserAlreadyExist)
{
//
}
else
{
//
}
}
else
{
//
}
答案 1 :(得分:3)
switch
语句不能像if/else
那样具有多个条件,这是因为switch
通常实现为快速程序中哈希表,这意味着:1)所有比较值必须是const,并且2)它实际上没有与switch case表达式一样多的比较。
有一个"解决方法"这需要将布尔表达式转换为自定义enum
值,然后转换为switching
,但我不知道在这种情况下如何提供任何帮助。
答案 2 :(得分:1)
这不是switch语句的理想选择,因为你的逻辑取决于几个变量的值,而不是检查单个变量的不同值。
以下是一种易于转换为switch语句的代码示例:
if (value == 0)
{
// do stuff
}
else if (value == 1)
{
// etc
}
作为switch语句:
switch (value)
{
case 0:
// do stuff
break;
case 1:
// etc
break;
}
如果您正在检查不同变量的组合,那么使用if
... else if
语句并没有错。如果由于某种原因你必须使用switch语句,最好的解决方案是创建一个enum
,其值代表你可能的每个状态,然后打开它。例如:
enum OrganizerType
{
SelectedOrganizer,
NewOrganizerUserExists,
NewOrganizerUserDoesntExist
}
// ...
OrganizerType orgType = calculateOrgType();
switch (orgType)
{
case SelectedOrganizer:
// do stuff
break;
// etc
}
答案 3 :(得分:0)
作为一项运动纯粹是"可以做到吗?",这是一个解决方案。任何开发人员都不应该考虑在现实生活中使用它:
var switchValue = IsSelectedOrganizer ? 4 : 0 +
IsNewOrganizer ? 2 : 0 +
IsOrganizerUserAlreadyExist ? 1 : 0;
switch (switchValue)
{
case 7:
case 6:
case 5:
case 4:
// IsSelectedOrganizer part
break;
case 3:
// IsNewOrganizer && IsOrganizerUserAlreadyExist part
break;
case 2:
// IsNewOrganizer && !IsOrganizerUserAlreadyExist part
break;
default:
// else part
}
答案 4 :(得分:-1)
public int FlagValues
{
return (IsSelectedOrganizer & 1) + (IsNewOrganizer & 2) + (IsOrganizerUserAlreadyExists & 4)
}
switch (FlagValues)
答案 5 :(得分:-1)
无论比使用if
更好,还是使用switch
s实现; - )。
switch (IsSelectedOrganizer)
{
case true:
{
//
}
break;
default:
{
switch (IsNewOrganizer)
{
case true:
{
switch ((IsOrganizerUserAlreadyExist))
{
case true:
{
//
}
break;
default:
{
//
}
break;
}
}
break;
default:
{
//
}
break;
}
}
break;
}