Rozwiązywałem problem z jedną z naszych stron i znalazłem pętlę feachloop, w której zagnieżdżono pętle foreach i zamiast je zagnieżdżać, zamierzałem wielowątkowo pętle foreach i rozdzielić je pojedynczo

List<int> buildings = new List<int>();
            List<int> wings = new List<int>();
            List<int> complexes = new List<int>();
            List<int> unittypes = new List<int>();
            int floors = 0;
            int unitcnt = 0;
            ICollection<PMRUnitTypes> units = new List<PMRUnitTypes>();
            List<PMRProjectConfig> UnityTypesObj = new List<PMRProjectConfig>();


            //for each config in the project, get the summay

            foreach (var c in prj.Configs)
            {
                //add the buildings
                if (c.PB_ID.HasValue && buildings.FirstOrDefault(b => b == c.PB_ID.Value) <= 0)
                    buildings.Add(c.PB_ID.Value);

                //add the complexs
                if (c.PC_ID.HasValue && complexes.FirstOrDefault(co => co == c.PC_ID.Value) <= 0)
                    complexes.Add(c.PC_ID.Value);

                //add the wings
                if (c.PW_ID.HasValue && wings.FirstOrDefault(w => w == c.PW_ID.Value) <= 0)
                    wings.Add(c.PW_ID.Value);

                //add the floors
                if (c.Floor_ID.HasValue)
                    floors++;

                UnityTypesObj.Add(c.UnitTypes);

                //add the unit type codes
                foreach (var ut in c.UnitTypes)
                {
                    if (unittypes.FirstOrDefault(utc => utc == ut.PUTC_ID) <= 0)
                        unittypes.Add(ut.PUTC_ID);
                }

                //get the units
                var dscnt = DataServiceLocator.RunStoreProcedureReturnDS("GetPMRUnitsCountFromConfig", 200, new SqlParameter[]{
                    new SqlParameter{ParameterName = "@PPC_ID", Value= c.PPC_ID}
                });

                foreach (DataRow r in dscnt.Tables[0].Rows)
                {
                    unitcnt += int.Parse(r["unitCount"].ToString());
                }
            };

Oto mój kod, ale w drugiej pętli foreach zamiast tego próbowałem dodać go do listy, a następnie przejść przez niego po wykonaniu tego początkowego, ale otrzymuję powyższy błąd z ICollection. Dowiedziałem się, że PMRUnittypes to ICollection konfiguracji, ale czy jest jakiś sposób, aby to zrobić lub napisać to lepiej, co przyspieszyłoby kod?

Błąd dotyczy UnityTypesObj.Add(c.UnitTypes);, a proj.configs pochodzi z bazy danych var cust =DataServiceLocator.GetCustomer_DAO().GetCustomerByID(customerID, Context);

c#
1
Josh Deshazer 9 listopad 2018, 20:29

1 odpowiedź

Najlepsza odpowiedź

Ponieważ c.UnitTypes jest kolekcją, musisz zamiast tego użyć AddRange:

UnityTypesObj.AddRange(c.UnitTypes);
1
LarsTech 9 listopad 2018, 23:15