好的,如果我有一个字符串,我希望基于多个条件等于什么,那么实现它的最佳方法是什么?
伪码
int temp = (either 1, 2, or 3)
string test = (if temp = 1, then "yes") (if temp = 2, then "no") (if temp = 3, then "maybe")
有没有简洁的方法来做到这一点?你会做什么?
答案 0 :(得分:11)
使用switch
switch(temp)
{
case 1:
return "yes";
case 2:
return "no";
case default:
return "maybe";
}
答案 1 :(得分:5)
您可以使用其他答案中提到的switch语句,但也可以使用字典:
var dictionary = new Dictionary<int, string>();
dictionary.Add(1, "yes");
dictionary.Add(2, "no");
dictionary.Add(3, "maybe");
var test = dictionairy[value];
此方法比switch语句更灵活,并且比嵌套的tenary运算符语句更具可读性。
答案 2 :(得分:4)
string test = GetValue(temp);
public string GetValue(int temp)
{
switch(temp)
{
case 1:
return "yes";
case 2:
return "no";
case 3:
return "maybe";
default:
throw new ArgumentException("An unrecognized temp value was encountered", "temp");
}
}
答案 3 :(得分:2)
您可以使用switch
声明
string temp = string.Empty;
switch(value)
{
case 1:
temp = "yes";
break;
case 2:
temp = "no";
break;
case 3:
temp = "maybe";
break;
}
答案 4 :(得分:2)
基本理念是:
String choices[] = {"yes","no","maybe"};
string test = choices[temp-1];
实际实现它的方法有很多种。根据条件变量的不同,您可能希望将其实现为某种键值列表。请参阅Zeebonk的答案。
答案 5 :(得分:1)
最简洁的答案是嵌套的三元运算符
string test = (temp == 1 ? "yes" : (temp == 2 ? "no" : (temp == 3 ? "maybe" : "")));
如果临时值仅为1,2,3则
string test = (temp == 1 ? "yes" : (temp == 2 ? "no" : "maybe"));
当然这是所提出的简明回答,这并不意味着它是最好的。 如果你不能排除它,将来你需要更多的值来测试,那么最好使用@zeebonk答案中解释的字典方法。
答案 6 :(得分:1)
此开关更接近您的伪代码,并且是完全C#代码:
int temp = /* 1, 2, or 3 */;
string test;
switch(temp)
{
case 1:
test = "yes";
break;
case 2:
test = "no";
break;
case 3:
test = "maybe";
break;
default:
test = /* whatever you want as your default, if anything */;
break;
}
您的伪代码不包含默认情况,但最好包含一个。
答案 7 :(得分:0)
显而易见的答案是切换案例
但只是另一种味道:
int temp = x; //either 1,2 or 3
string test = (temp == 1 ? "yes" : temp == 2 ? "no" : "maybe");
答案 8 :(得分:0)
你也可以扭转局面:
class Program
{
enum MyEnum
{
Yes = 1,
No,
Maybe
}
static void Main(string[] args)
{
Console.WriteLine(MyEnum.Maybe.ToString());
Console.ReadLine();
}
}
这也更符合temp,只有1,2或3.如果是int编译器,如果temp的值为34,则不会发出警告。
你也可以这样做:
string GetText(int temp){
return ((MyEnum)temp).ToString();
}
GetText(2)将返回“否”