我有一份报纸和杂志清单。精确到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>
并这样做,但是我不知道如何进行。我什至不知道这是否是正确的方法。
请帮助。
答案 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
。