У меня есть список газет и журналов. Если быть точным, он считает до 1374, и все мои файлы называются abcd_20190406.xml, где abcd — это аббревиатура имени файла, а 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> и сделать это, но я понятия не имею, как действовать дальше. Я даже не знаю, правильный ли это способ сделать это.
Пожалуйста помоги.
Я предполагаю, что у вас есть какой-то источник для текста, аббревиатуры и языка, вместо того, чтобы вводить его из ваших собственных знаний, поэтому обработайте этот источник, чтобы сгенерировать данные и сохранить их в таблице внутри базы данных или коллекции, а не писать 1734 * 3 записи по сами.





Инкапсулируйте логику в классе, что упрощает поддержку кода. Когда вы решите добавить или удалить журналы, вам не нужно менять свой код в классе — принцип открытия-закрытия, не так ли?
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.
Создайте класс для хранения информации о каждой публикации, например:
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;
}
Используйте список, содержащий данные для публикации, сокращения и языка.