public YearSchedule Add(YearSchedule obj)
        {
            if (obj == null)
            {
                return(null);
            }
            if (YearSchedules == null)
            {
                YearSchedules = new List <YearSchedule>();
            }
            if (!YearSchedules.Any(i => i.Name == obj.Name))
            {
                YearSchedules.Add(obj);

                foreach (var w in obj.WeekSchedules)
                {
                    // this.Add(w);
                    foreach (var d in w.Days)
                    {
                        this.Add(d);
                    }
                }

                return(obj);
            }
            else
            {
                var oc = YearSchedules.Single(o => o.Name == obj.Name);
                CopyObjectData(obj, oc, "", BindingFlags.Public | BindingFlags.Instance);

                foreach (var w in oc.WeekSchedules)
                {
                    //this.Add(w);
                    foreach (var d in w.Days)
                    {
                        this.Add(d);
                    }
                }

                return(oc);
            }
        }
        public T getElementByName <T>(string name)
        {
            // materials and constructions

            try
            {
                if (typeof(T) == typeof(OpaqueConstruction))
                {
                    return((T)Convert.ChangeType(OpaqueConstructions.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GlazingConstruction))
                {
                    return((T)Convert.ChangeType(GlazingConstructions.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(OpaqueMaterial))
                {
                    return((T)Convert.ChangeType(OpaqueMaterials.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GlazingMaterial))
                {
                    return((T)Convert.ChangeType(GlazingMaterials.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GasMaterial))
                {
                    return((T)Convert.ChangeType(GasMaterials.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(GlazingConstructionSimple))
                {
                    return((T)Convert.ChangeType(GlazingConstructionsSimple.Single(o => o.Name == name), typeof(T)));
                }

                // schedules

                else if (typeof(T) == typeof(DaySchedule))
                {
                    return((T)Convert.ChangeType(DaySchedules.Single(o => o.Name == name), typeof(T)));
                }
                //else if (typeof(T) == typeof(WeekSchedule))
                //{
                //    return (T)Convert.ChangeType(WeekSchedules.Single(o => o.Name == name), typeof(T));
                //}
                else if (typeof(T) == typeof(YearSchedule))
                {
                    return((T)Convert.ChangeType(YearSchedules.Single(o => o.Name == name), typeof(T)));
                }

                else if (typeof(T) == typeof(ScheduleArray))
                {
                    return((T)Convert.ChangeType(ArraySchedules.Single(o => o.Name == name), typeof(T)));
                }

                // zone def

                else if (typeof(T) == typeof(ZoneLoad))
                {
                    return((T)Convert.ChangeType(ZoneLoads.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneVentilation))
                {
                    return((T)Convert.ChangeType(ZoneVentilations.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneConstruction))
                {
                    return((T)Convert.ChangeType(ZoneConstructions.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneConditioning))
                {
                    return((T)Convert.ChangeType(ZoneConditionings.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(DomHotWater))
                {
                    return((T)Convert.ChangeType(DomHotWaters.Single(o => o.Name == name), typeof(T)));
                }
                else if (typeof(T) == typeof(ZoneDefinition))
                {
                    return((T)Convert.ChangeType(ZoneDefinitions.Single(o => o.Name == name), typeof(T)));
                }

                else if (typeof(T) == typeof(WindowSettings))
                {
                    return((T)Convert.ChangeType(WindowSettings.Single(o => o.Name == name), typeof(T)));
                }

                else if (typeof(T) == typeof(FloorDefinition))
                {
                    return((T)Convert.ChangeType(FloorDefinitions.Single(o => o.Name == name), typeof(T)));
                }

                // dont know what this is???

                else
                {
                    return((T)Convert.ChangeType(null, typeof(T)));
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Could not find " + name + ": " + ex.Message);
                return(default(T));
            }
        }