Это ограничивает кастомизацию, но ускоряет разработку.
internal struct Letter
{
public Letter(LetterType type, char letter)
{
Type = type;
Value = letter;
}
public LetterType Type { get; init; }
public char Value { get; init; }
}
internal class Alphabet
{
// ...
public IReadOnlySet<char> GetVowelSet()
{
return Letters
// Where фильтрует исходную колекцию со всеми данными по переданному условию,
// конкретно здесь по типу символа
.Where(letter => letter.Type == LetterType.Vowel)
// Select получает из отфильтрованных значений новый тип данных,
// конкретно здесь только свойство типа char
.Select(letter => letter.Value)
// Весь отфильтрованный результат кладём в HashSet<char>
.ToHashSet();
}
// ...
}
var vowels = alphabet.GetVowelSet();
var consonants = alphabet.GetConsonantSet();
IReadOnlySet<char> vowels = alphabet.GetVowelSet();
IReadOnlySet<char> consonants = alphabet.GetConsonantSet();