我有一份报纸和杂志清单。确切地说它是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>
并做它但我不知道如何继续。我甚至都不知道这是否是正确的做法。
请帮忙。
创建一个类来保存每个发布的信息,例如:
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;
}
在类中封装逻辑,这使您可以轻松地维护代码。当您决定添加或删除杂志时,您不需要在课堂上更改您的代码 - 开放 - 关闭原则不是吗?
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
。