public bool Добавить(ЭлементПеречисления элемент, Строка описание) { if (Содержит(элемент)) { return(false); } СписокЭлементов.Add(элемент); СписокОписанийЭлементов.Add(описание); return(true); }
public ЭлементПеречисления ДайЭлементПоОписанию(Строка описание) { var номер = СписокОписанийЭлементов.FindIndex(оп => оп == описание); var элемент = new ЭлементПеречисления { флаги = new byte[СписокОписанийЭлементов.Count] }; элемент.флаги[номер] = 1; return(элемент); }
public bool Содержит(ЭлементПеречисления элемент) { foreach (var эл in СписокЭлементов) { if (эл.Совпадает(элемент)) { return(false); } } return(true); }
// у текущего элемента заполнены теже флаги что и другого плюс есть еще // аналог включения как в множестве public bool Включает(ЭлементПеречисления другойЭлемент) { if (Группа != другойЭлемент.Группа) { return(false); } for (int и = 0; и < флаги.Length; и++) { if (другойЭлемент.флаги[и] != 0 && флаги[и] != другойЭлемент.флаги[и]) { return(false); } } return(true); }
public ЭлементПеречисления ДайЭлементПоСпискуОписаний(Строка[] описания) { var элемент = new ЭлементПеречисления { флаги = new byte[СписокОписанийЭлементов.Count] }; foreach (var описание in описания) { var номер = СписокОписанийЭлементов.FindIndex(оп => оп == описание); if (номер >= 0) { элемент.флаги[номер] = 1; } } return(элемент); }
public Строка Описание => Группа.ДайОписание(this); // для флагов это будет список Строк public bool Совпадает(ЭлементПеречисления другойЭлемент) { if (Группа != другойЭлемент.Группа) { return(false); } if (флаги.Length != другойЭлемент.флаги.Length) { return(false); } // длины могут не совпадать for (int и = 0; и < флаги.Length; и++) { if (флаги[и] != другойЭлемент.флаги[и]) { return(false); } } return(true); }
internal Строка ДайОписание(ЭлементПеречисления элементПеречисления) { var номер = СписокЭлементов.IndexOf(элементПеречисления); return(СписокОписанийЭлементов[номер]); }