Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / В List записываются одни и те же данные. / 4 сообщений из 4, страница 1 из 1
12.08.2016, 13:10
    #39291020
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В List записываются одни и те же данные.
Здравствуйте!
Помогите разобраться со следующей ошибкой в MVC-проекте:
Есть такая модель :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class SubCategoryViewModel
    {
        public List<SubCategory_PicturePathes> listSubCategory_PicturePathes;
    }

    public class SubCategory_PicturePathes
    {
        public PicturesSubCategory pictureSubCategory;
        public string picturePath;
    }



И метод контроллера :
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public ActionResult ViewSubCategories(int idCategory)
            {
                SubCategoryViewModel subCategoryViewModel = new SubCategoryViewModel();
                subCategoryViewModel.listSubCategory_PicturePathes = new List<SubCategory_PicturePathes>();
                SubCategory_PicturePathes subCategoryPicturePath = new SubCategory_PicturePathes();
                string Path = ConfigurationManager.AppSettings["PathToSubCategoryImages"];
                var listPicturesSubCategories = new List<PicturesSubCategory>();

                using (Shoes_DB db = new Shoes_DB())
                {                   
                    listPicturesSubCategories = db.PicturesSubCategories.Where(n => n.categoryId == idCategory).ToList();
                    for (int i = 0; i < listPicturesSubCategories.Count; i++)
                    {
                        subCategoryPicturePath.pictureSubCategory = listPicturesSubCategories[i];                    
                        subCategoryPicturePath.picturePath = Path + subCategoryPicturePath.pictureSubCategory.pathPictureSubCategory; 
                        subCategoryViewModel.listSubCategory_PicturePathes.Add(subCategoryPicturePath);
                    }                    
                }
                return View(subCategoryViewModel);


Проблема в том, что в List модели вот здесь
Код: c#
1.
subCategoryViewModel.listSubCategory_PicturePathes.Add(subCategoryPicturePath);

добавляются одни и те же данные - последний элемент. То есть, если в листе 5 элементов, то получается, что лист состоит из пяти элементов последнего добавленного. Почему такое поведение, помогите разобраться, пожалуйста.
...
Рейтинг: 0 / 0
12.08.2016, 13:27
    #39291035
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В List записываются одни и те же данные.
erman, потому что SubCategory_PicturePathes - это ссылочный тип, а потому инициализировать его надо так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
                SubCategoryViewModel subCategoryViewModel = new SubCategoryViewModel();
                subCategoryViewModel.listSubCategory_PicturePathes = new List<SubCategory_PicturePathes>();
                string Path = ConfigurationManager.AppSettings["PathToSubCategoryImages"];
                var listPicturesSubCategories = new List<PicturesSubCategory>();

                using (Shoes_DB db = new Shoes_DB())
                {                   
                    listPicturesSubCategories = db.PicturesSubCategories.Where(n => n.categoryId == idCategory).ToList();
                    for (int i = 0; i < listPicturesSubCategories.Count; i++)
                    {
                        SubCategory_PicturePathes subCategoryPicturePath = new SubCategory_PicturePathes();
                        subCategoryPicturePath.pictureSubCategory = listPicturesSubCategories[i];                    
                        subCategoryPicturePath.picturePath = Path + subCategoryPicturePath.pictureSubCategory.pathPictureSubCategory; 
                        subCategoryViewModel.listSubCategory_PicturePathes.Add(subCategoryPicturePath);
                    }                    
                }
                return View(subCategoryViewModel);
...
Рейтинг: 0 / 0
12.08.2016, 13:38
    #39291049
erman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В List записываются одни и те же данные.
Большое спасибо за помощь!
...
Рейтинг: 0 / 0
12.08.2016, 13:44
    #39291052
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В List записываются одни и те же данные.
erman, чтобы лучше понять что происходит в данном случае, то происходит следующее: ссылочный объект subCategoryPicturePath инициализировался единожды до цикла, а потому при каждой итерации цикла for значение одного и того же объекта переписывалось новым/последним значением до тех пор пока цикл не завершается. Соответственно получалось то, что получалось, посколько объект и ссылка на него была только одна.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / В List записываются одни и те же данные. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]