0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 12
1

Передача значимого типа от одного List<T> другому

01.04.2018, 10:51. Показов 1095. Ответов 3
Метки нет (Все метки)

Добрый день, уважаемые форумчане!
Прошу помочь в передаче значений от одного List<T> другому: дело в том, что при упаковке
C#
1
daylab.AddRange(lit.FindAll(x => x.Val4 == pan.Name))
передаются ссылка на значения, и в дальнейшем при изменении значений в daylab меняется также в lit.
Прочитал Рихтера про передачу ссылочных, значимых типов, он рекомендует в данном случае пользоваться интерфейсом, у меня получился такой:
C#
1
2
3
4
5
internal interface IBoxingLab
        {
            void AddRange(List<Item> listItem);
        }
((IBoxingLab)daylab).AddRange(lit.FindAll(x => x.Val4 == pan.Name));
Но всё равно при компиляции выскакивает ошибка: System.InvalidCastException - не удалось привести тип объекта System.Collections.Generic.List к типу IBoxingLab.
Может кто-нибудь знает в чём причина???
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2018, 10:51
Ответы с готовыми решениями:

Как добавить элементы одного List к другому List
public class groupIndicators { public string Name { get; set; } //Наименование группы...

Передача List другому классу
using System; using System.Collections.Generic; using System.Drawing; using...

Передача файла из одного ПК к другому
Мне нужно, чтоб я мог передавать файлы через com порт на другой комп'ютер через програму, но не...

Передача свойств одного компонента другому
Добрый день. Не подскажите - вопрос такой. Есть эталонный StringGrid1 с кучей свойств -...

3
Эксперт .NETАвтор FAQ
10337 / 5068 / 1824
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
01.04.2018, 11:17 2
Alex1988S,
1) Приведите содержимое класса Item
2) Объясните что вы хотите получить
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 12
01.04.2018, 11:25  [ТС] 3
Storm23,
C#
1
2
3
4
5
6
7
8
9
10
internal class Item
    {
        public string Key { get; set; }
        public string Val1 { get; set; }
        public string Val2 { get; set; }
        public string Val3 { get; set; }
        public string Val4 { get; set; }
        public string Val5 { get; set; }
        public string Get { get; set; }
}
После передаче данных из List<Item> lit в daylab, я меняю некоторые значения Val.
Проблема в том, что в lit данные значения также меняются(((
0
Эксперт .NET
5853 / 4730 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
01.04.2018, 11:55 4
Alex1988S,
Класс - ссылочный тип, а не значимый.
И естественно будут копироваться ссылки во второй лист.
Воспользуйтесь конструктором копирования.
Пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
 
namespace ListToList
{
 
    class Program
    {
        static void Main(string[] args)
        {
            List<Item> list1 = new List<Item>();
            list1.Add(new Item("qqq", "www"));
            list1.Add(new Item("aaa", "sss"));
            list1.Add(new Item("zzz", "www"));
            list1.Add(new Item("xxx", "ggg"));
            List<Item> list2 = new List<Item>();
            foreach (Item item in list1)
                if (item.Val2 == "www")
                    list2.Add(new Item(item)); //копируем, создавая новый объект
            Console.ReadLine();
        }
    }
 
    class Item
    {
        public string Val1 { get; set; }
        public string Val2 { get; set; }
 
        public Item(string val1, string val2)
        {
            this.Val1 = val1;
            this.Val2 = val2;
        }
 
        public Item(Item sourse) //конструктор копирования
        {
            this.Val1 = sourse.Val1;
            this.Val2 = sourse.Val2;
        }
    }
}
Ну или с помощью Linq:
C#
1
list2.AddRange(list1.FindAll(x => x.Val2 == "www").Select(item => new Item(item)));
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2018, 11:55
Помогаю со студенческими работами здесь

Передача значения переменных одного класса другому
Всем привет. Нужно передать значения одного класса другому, при этом семантика методов класса...

SignalR v2: передача данных от одного пользователя другому
Нужна помощь по SignalR v2, конкретно: Передача данных от js приложения одного пользователя к js...

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

Передача двумерного динамического массива от одного окна другому
Добрый день. Дело вот в чём. Не могу передать двумерный дин. массив от одного дочернего окна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru