替代if,else if

米尔恩

我有很多if,else if语句,我知道必须有更好的方法来做到这一点,但是即使在搜索stackoverflow之后,我也不确定在我的特定情况下如何这样做。

我正在解析文本文件(票据),并根据帐单上是否出现某些字符串,将服务提供者的名称分配给变量(txtvar.Provider)。

这只是我正在做的一小部分(不要笑,我知道这很麻烦)。总而言之,如果有,则大约为300。

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;
}

我绝对乐于接受想法。

我需要确定值评估顺序的能力。可以想象,在解析数百种稍有不同的布局时,我偶尔会遇到一个问题,即该账单所属的服务提供商没有一个独特的指示器。

约书亚亲爱的

为什么不使用C#提供的一切?匿名类型,集合初始值设定项,隐式类型的变量和lambda语法LINQ的以下用法紧凑,直观,并保持了对按顺序评估模式的修改要求:

var providerMap = new[] {
    new { Pattern = "SWGAS.COM"       , Name = "Southwest Gas" },
    new { Pattern = "georgiapower.com", Name = "Georgia Power" },
    // More specific first
    new { Pattern = "City of Austin"  , Name = "City of Austin" },   
    // Then more general
    new { Pattern = "Austin"          , Name = "Austin Electric Company" }   
    // And for everything else:
    new { Pattern = String.Empty      , Name = "Unknown" }
};

txtVar.Provider = providerMap.First(p => txtVar.BillText.IndexOf(p.Pattern) > -1).Name; 

模式对更可能来自可配置的来源,例如:

var providerMap =
    System.IO.File.ReadLines(@"C:\some\folder\providers.psv")
    .Select(line => line.Split('|'))
    .Select(parts => new { Pattern = parts[0], Name = parts[1] }).ToList();

最后,正如@millimoose指出的那样,在方法之间传递时,匿名类型的用处较小。在那种情况下,我们可以定义一个trivalProvider类,并使用对象初始化程序来实现几乎相同的语法:

class Provider { 
    public string Pattern { get; set; } 
    public string Name { get; set; } 
}

var providerMap =
    System.IO.File.ReadLines(@"C:\some\folder\providers.psv")
    .Select(line => line.Split('|'))
    .Select(parts => new Provider() { Pattern = parts[0], Name = parts[1] }).ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

替代if-else

来自分类Dev

Python替代if / else语句

来自分类Dev

替代switch / if else语句?

来自分类Dev

Python替代if / else语句

来自分类Dev

替代switch / if else语句?

来自分类Dev

替代 if else 链的范围

来自分类Dev

if else-if else 语句的替代 C++

来自分类Dev

替代'if(x)Some(y)else'

来自分类Dev

N替代if-else条件

来自分类Dev

替代多个 if-else-if 条件

来自分类Dev

替代 if-then-else 或 case 语句

来自分类Dev

使用双打时替代if else语句

来自分类Dev

切换(true)替代else

来自分类Dev

替代if-else和switch语句

来自分类Dev

替代if else陈述或建议最佳方法

来自分类Dev

JavaScript中if else语句的替代方法

来自分类Dev

是否有使用IF / ELSE语句的替代方法

来自分类Dev

存储过程SQL Server中IF ELSE的替代方法

来自分类Dev

IF-ELSE BIRT中用于多个SQL标准的替代方法

来自分类Dev

坏的Java的替代期待的if-else或开关结构

来自分类Dev

在 python 中编写 15 个 if else 语句的替代方法

来自分类Dev

从字典中提取信息... if/else 语句的替代方法

来自分类Dev

UML-序列图中的替代流程是否需要if和else防护?

来自分类Dev

mvc替代使用if-else用于多个视图和控制器

来自分类Dev

在Java中遵循if-else阶梯更好的替代方法是什么?

来自分类Dev

批处理文件具有If-Else语句的哪些替代方法?

来自分类Dev

在没有 else 的情况下使用三元的替代方法

来自分类Dev

替代GROUP BY

来自分类Dev

NSDatePicker替代