Списки, энумерейбл. Обработка по значению(по копие объекта) и по ссылке объектов - C#

Узнай цену своей работы

Формулировка задачи:

  [TestMethod()]
        public void TestCalcData()
        {
            CalcData dd = new CalcData();
            dd.ID_CALC_DATA = 444;
            dd.ID_CALC_TYPE = CalcDataType.VVd;
            var ddList =  new List<CalcData>()  ;
            ddList.Add(dd);
          
            var newddList = ddList.Select(y=> y.clone());
            foreach (var item in newddList)
              item.ID_CALC_TYPE = CalcDataType.KRDRd;

          Assert.AreEqual(CalcDataType.KRDRd, (CalcDataType) newddList.First().ID_CALC_TYPE);
      }
Даный тест не срабатвает видимо потому, что ddList.Select(y=> y.clone()); не список, а что-то непонятное с инфтрфейсом энумерейбл. А если изменить в тесте строку на ddList.Select(y=> y.clone()).ToList() , то всё срабатывает. Вопрос собственно почему? Зависит от типа контейнера что ли, по значению в фориче обрабатываются элементы, или по ссылке? И влияет ли на это - реализована функция Клон, и интерфейс клонэйбл, или нет на поведение элементов в списке?

Решение задачи: «Списки, энумерейбл. Обработка по значению(по копие объекта) и по ссылке объектов»

textual
Листинг программы
   List<int> dd1 = new List<int>();
            dd1.Add(2);
            dd1.Add(4);
 
            var newList = dd1.Select(x => x + 4).Select(y => y + 4);
 
            int i = newList.ElementAt(1);
            Assert.AreEqual(12, i);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы