/// <summary> /// УДАЛЕНИЕ ДУБЛИКАТОВ СВОЙСТВ /// Обход классов. Заполнение словарей для быстрого поиска классов /// </summary> /// <param name="class"></param> private void SurveyClass(Class @class) { @class.PropsCorrection(); if (!String.IsNullOrWhiteSpace(@class.Code))//Классы без кода останутся но не попадают в словари { ClassLookUpByCode.Add(@class.Code, @class); if (@class.Properties.Count > 0) { string key = GetClassKey(@class.Properties); //Если есть 2 класса с одинаковым набором свойств, то словаре будет только один из них if (!ClassLookUpByProps.ContainsKey(key)) { ClassLookUpByProps.Add(key, @class); } } else { //обнаружен класс без свойств. Он подходит по имени? for (int i = 0; i < Classifier.DefaultClasses.Length; i++) { if (DefClassesWithNoProps[i] == null && @class.Name.Equals(Classifier.DefaultClasses[i])) { DefClassesWithNoProps[i] = @class; } } } } foreach (Class nestedClass in @class.NestedClasses) { SurveyClass(nestedClass); } }
/// <summary> /// Создает класс и добавляет его во все нужные словари /// </summary> /// <param name="Name"></param> /// <param name=""></param> /// <returns></returns> private Class CreateNewClass(string name, string nameInPlural, int defLevelNum, string propKey = null, List <XML.Cl.Property> clProps = null) { //string code = GetUniqueClassCode(); string code = Guid.NewGuid().ToString(); Class @class = new Class() { Name = name, NameInPlural = nameInPlural, DetailLevel = DefDetailLevels[defLevelNum], Code = code }; ClassLookUpByCode.Add(code, @class); Classifier.NestedClasses.Add(@class); if (propKey != null && clProps != null) { @class.Properties = clProps; ClassLookUpByProps.Add(propKey, @class); } return(@class); }