如何在c#中以较短的方式写出其他条件?

Baj*_*han 2 c#

我想写一下如果c#中的Else条件更短,你可以在下面观察我的代码吗'那么冗长..我想要用更短的方式写,帮助我任何人都知道.我们可以使用其他任何方式来写它吗?

int paymentType;
if (lblPayment.Text == "Credit")
{
    paymentType = 1;
}
else if (lblPayment.Text == "Open Invoice")
{
    paymentType = 2;
}
else if (lblPayment.Text == "COD")
{
    paymentType = 3;
}
else if (lblPayment.Text == "Check")
{
    paymentType = 4;
}
else if (lblPayment.Text == "Paypal")
{
    paymentType = 5;
}
else if (lblPayment.Text == "Money Order")
{
    paymentType = 6;
}
else if (lblPayment.Text == "Other")
{
    paymentType = 7;
}
Run Code Online (Sandbox Code Playgroud)

Bas*_*Bas 14

请考虑使用字典:

 Dictionary<string, int> lookup = new Dictionary<string, int>();
 lookup.Add("Credit", 1);
 lookup.Add("Open Invoice", 2);
 //etc
Run Code Online (Sandbox Code Playgroud)

然后:

 int paymentType = lookup[lblPayment.Text];
Run Code Online (Sandbox Code Playgroud)

KeyNotFoundException如果字典中不存在该值,则抛出一个.如果要在查找表中不存在该值时提供默认值或执行其他操作,可以使用TryGetValue如下:

 int paymentType;
 if (lookup.TryGetValue(lblPayment.Text, out paymentType)) {
    //do stuff with paymentType
 } else {
    //handle error, paymentType is now 0.
 }
Run Code Online (Sandbox Code Playgroud)

  • @MatthewWatson:不,你使用`TryGetValue`而不是使用索引器.(或者至少,这就是我要做的事情.)没有必要两次查看密钥. (2认同)

Sad*_*que 5

使用switch语句:

switch(lblPayment.Text)
{
    case "Credit":
     paymentType = 1;
     break;
    case "Open Invoice":
     paymentType = 2;
     break;
     ......
}
Run Code Online (Sandbox Code Playgroud)

  • 你为什么要用这个开关?它只是试图将字符串映射到一个值 - 使用数组或字典感觉比这里的开关要干净得多. (3认同)
  • 这可能变得像一堆if语句一样笨拙. (2认同)