如何对超过1000个if语句执行检查?

时间:2019-04-07 06:14:44

标签: c# .net if-statement

我有一份报纸和杂志清单。精确到1374,我的所有文件都命名为abcd_20190406.xml,其中abcd是文件名abbreviaton,20190406是yyyyMMdd格式的日期。

所以我想要的是,如果我按WindowsForm中的按钮,它将在列表中搜索abcd。如果找到,它将填充其各自的数据,这些数据将在我的表单的TextBoxes中提及。

if (Path.GetFileNameWithoutExtension(cboSource.Text).StartsWith("aamfr"))
{
        TextBoxPublication.Text = "Anti-âge Magazine";
        TextBoxAbbreviation.Text = "aamfr";
        TextBoxLanguage.Text="fr";
}

if (Path.GetFileNameWithoutExtension(cboSource.Text).StartsWith("wic"))
{
        TextBoxPublication.Text = "Wisden Cricket Monthly";
        TextBoxAbbreviation.Text = "wic";
        TextBoxLanguage.Text="en";
}

以此类推。这是我目前的做法。如果有条件,给予1374。那么,有没有更快或更更好的方法呢?

我想到创建一个List<string>并这样做,但是我不知道如何进行。我什至不知道这是否是正确的方法。

请帮助。

2 个答案:

答案 0 :(得分:6)

创建一个类来保存每个出版物的信息,例如:

class PublicationInfo
{
    public string Title{ get; set; }
    public string Abbreviation{ get; set; }
    public string Language{ get; set; }
}

然后使用字典保存所有出版物

var Publications = new Dictionary<string,PublicationInfo>();

,并使用缩写作为关键字,用您的数据填充它。 然后,您将能够像这样填充文本框:

var abbreviation = Path.GetFileNameWithoutExtension(cboSource.Text).Split("_")[0];
if (Publications.ContainsKey(abbreviation)
{
    TextBoxPublication.Text = Publications[abbreviation].Title;
    TextBoxAbbreviation.Text = abbreviation;
    TextBoxLanguage.Text = Publications[abbreviation].Language;
}

答案 1 :(得分:4)

将逻辑封装在类中,这使您可以轻松维护代码。 当您决定添加或删除杂志时,无需在班级中更改代码-是开放式关闭原则吗?

public class Magazine
{
    public string Publication { get; set; }

    public string Abbreviation { get; set; }

    public string Language { get; set; }

    public Func<string, bool> Predicate { get; set; }
} 

private List<Magazine> _magazines = new List List<Magazine>
{
    new Magazine
    {
        Publication = "Anti-âge Magazine",
        Abbreviation = "aamfr",
        Language ="fr",  
        Predicate = source => source.StartsWith("aamfr")       
    }
}

用法

var magazine = 
    _magazines.Where(mag => mag.Predicate(cboSource.Text))
              .DefaultIfEmpty(new Magazine())
              .First();

TextBoxPublication.Text = magazine.Publication;
TextBoxAbbreviation.Text = magazine.Abbreviation;
TextBoxLanguage.Text= magazine.Language;

谓词功能将提供更灵活的方法,其中每个杂志都可以有不同的谓词,而不仅仅是StartsWith