如何使用超过1000条if语句执行检查?

问题描述 投票:0回答:2

我有一份报纸和杂志清单。确切地说它是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>并做它但我不知道如何继续。我甚至都不知道这是否是正确的做法。

请帮忙。

c# .net if-statement
2个回答
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;
}

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

© www.soinside.com 2019 - 2024. All rights reserved.