【发布时间】:2013-09-16 03:46:13
【问题描述】:
我有很多 if,else if 语句,我知道必须有更好的方法来做到这一点,但即使在搜索 stackoverflow 之后,我也不确定如何在我的特定情况下这样做。
我正在解析文本文件(账单)并根据账单上是否出现某些字符串将服务提供商的名称分配给变量 (txtvar.Provider)。
这是我正在做的一个小例子(别笑,我知道这很混乱)。总而言之,大约有 300 个 if,else if。
if (txtvar.BillText.IndexOf("SWGAS.COM") > -1)
{
txtvar.Provider = "Southwest Gas";
}
else if (txtvar.BillText.IndexOf("georgiapower.com") > -1)
{
txtvar.Provider = "Georgia Power";
}
else if (txtvar.BillText.IndexOf("City of Austin") > -1)
{
txtvar.Provider = "City of Austin";
}
// And so forth for many different strings
我想使用类似 switch 语句的东西来提高效率和可读性,但我不确定如何比较 BillText。我正在寻找类似的东西,但不知道如何使它工作。
switch (txtvar.BillText)
{
case txtvar.BillText.IndexOf("Southwest Gas") > -1:
txtvar.Provider = "Southwest Gas";
break;
case txtvar.BillText.IndexOf("TexasGas.com") > -1:
txtvar.Provider = "Texas Gas";
break;
case txtvar.BillText.IndexOf("Southern") > -1:
txtvar.Provider = "Southern Power & Gas";
break;
}
我绝对愿意接受想法。
我需要能够确定评估值的顺序。 您可以想象,在解析数百个略有不同的布局时,我偶尔会遇到一个问题,即没有明确唯一的指标来说明账单属于哪个服务提供商。
【问题讨论】:
-
对字符串列表的 for 循环?编辑:在
BillText, Provider元组列表上。 -
switch(true)可以工作。 -
不需要使用多个标签(尤其是解析等不适用的标签)。此外,没有必要发布数十行冗余代码来说明这个概念。我们在这里很快就明白了。 :-)
-
您可以使用
txtvar.BillText.Contains("value")来提高可读性 -
在这里评论,因为它适用于几乎所有的答案。使用字典 (=data) 而不是 if/else (=code) 可以轻松地从外部源(如 csv 文件)读取替换,无需重新编译应用程序即可扩展。
标签: c# performance if-statement dictionary loop-unrolling