powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
47 сообщений из 47, показаны все 2 страниц
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808383
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня!
нарисовал класс:
public class Req_shipment
{
public class Req_Item
{
public int itemIndex;
public string offerId;
};
public int shipmentId;
public List<Req_Item> items;
};

Создал переменную (req_item) и список таких же элементов (req_items) :
Код: c#
1.
2.
            var req_item = new Req_shipment.Req_Item() ;
            List<Req_shipment.Req_Item> req_items; req_items = new List<Req_shipment.Req_Item>(); 



Делаю запрос к бд, получаю рекордсет.
Последовательно читаю записи во временную переменную. И из неё пытаюсь наращивать список:
Код: c#
1.
2.
3.
4.
5.
6.
7.
                while (sqlResult.Read())
                { i++;
                   req_item.itemIndex = Convert.ToInt32(sqlResult.GetString(2)); req_item.offerId = sqlResult.GetString(3); // Всосали очередную запись 
                   Console.WriteLine($"req_item.itemIndex = {req_item.itemIndex} \t req_item.offerId = {req_item.offerId} "); // Глянули что считали
                   req_items.Add(req_item); // Добавили новую строку в список
                }
 



На выходе имею список req_items, где все строки идентичны (идентичны последнему считанному значению в элементы req_item.

Как сделать так что бы список наполнялся уникальными строками? Если обойтись без req_item то как?

Это,.... Читал про статистические и ссылочные типы. Не понял.


--------------------------
No ROM Basic...
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808388
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже на шизофазию, все в кучу, переходы из одной темы в другую, при этом ничего не понятно.
При чем тут значимые и ссылочные типы?
Оформите сообщение нормально и продумайте свой вопрос, опишите, что у вас не получается, пока я вижу, что вы знаете какие то термины, но не понимаете, что они обозначают.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808392
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
...
while (sqlResult.Read())
...



покажите как вы получаете из БД результат и какого он типа
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808393
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нарисуй для начала класс нормально. В смысле здесь. Неужто ты думаешь кто-то будет разбирать твой неформатированный текст. И оформи вообще код по-человечески - глазам ведь больно.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808396
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтоб строки не повторялись используйте не List<T>, а HashSet<T>, а еще лучше сделайте запрос в базе, пусть она сама фильтрует записи повторяющиеся
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808397
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
Код: c#
1.
2.
3.
...
while (sqlResult.Read())
...



покажите как вы получаете из БД результат и какого он типа

sqlCommand.CommandText = "SELECT ... FROM ... where .... ";
var sqlResult = sqlCommand.ExecuteReader();

все возвращаемые значения - string (так проще, не смотря на необходимость последующего преобразования, например, в int32)
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808400
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,
чем проще то?
натуральное число 12345678 в памяти занимает 4 байта, а строка 16 байт. А это значит, что накладные расходы на передачу и чтение возрастают.
а если взять вещественные числа (double, decimal) ты можно при таком подходе хапнуть таких проблем, что мало и просто не покажется, будите потом локти кусать и переписывать свой г..о код с нуля, так как выглядит он довольно монолитно
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808402
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat Нарисуй для начала класс нормально. В смысле здесь. Неужто ты думаешь кто-то будет разбирать твой неформатированный текст. И оформи вообще код по-человечески - глазам ведь больно.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
            public class Req_shipment
            {
                public class Req_Item
                {
                    public int itemIndex;
                    public string offerId;
                };
                public int shipmentId;
                public List<Req_Item> items;
            };



так норм?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808404
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,
В консоль нормально вывод?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808407
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesSIMPLicity_,
чем проще то?
натуральное число 12345678 в памяти занимает 4 байта, а строка 16 байт. А это значит, что накладные расходы на передачу и чтение возрастают.
а если взять вещественные числа (double, decimal) ты можно при таком подходе хапнуть таких проблем, что мало и просто не покажется, будите потом локти кусать и переписывать свой г..о код с нуля, так как выглядит он довольно монолитно

В данной ситуации это несущественно.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808408
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Как сделать так что бы список наполнялся уникальными строками?
При считывании каждой новой строки создавать новый Req_shipment.Req_Item .

А сейчас вы его один раз создали и перетираете ему itemIndex и offerId.
Плюс добавляете его N раз в список.

В итоге у вас элементы списка N раз ссылаются на один и тот же req_item.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808409
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно они у тебя идентичны. Ты ведь туда один и тот же объект пихаешь. Букварь в руки и учи, что такое reference types.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808411
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123SIMPLicity_,
В консоль нормально вывод?
Консоль показывает ТЕКУЩЕЕ состояние переменной.
Проблема в том, что каждый элемент списка req_items ссылается (ссылается!) на переменную req_item.
То есть все элементы списка req_items это всего лишь отсылки к переменной req_item
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808412
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

Код: c#
1.
2.
3.
4.
5.
6.
var req_items = new List<Req_shipment.Req_Item>();

while (sqlResult.Read())
{
    req_items.Add(new Req_shipment.Req_Item { itemIndex = sqlResult.GetString(2), offerId = sqlResult.GetString(3) });
}
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808413
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,
У тебя реально работает только List<Req_Item>
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808415
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatКонечно они у тебя идентичны. Ты ведь туда один и тот же объект пихаешь. Букварь в руки и учи, что такое reference types.
Об этом и был вопрос! Как это исправить?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808418
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Petro123SIMPLicity_,
В консоль нормально вывод?
Консоль показывает ТЕКУЩЕЕ состояние переменной.
Проблема в том, что каждый элемент списка req_items ссылается (ссылается!) на переменную req_item.
То есть все элементы списка req_items это всего лишь отсылки к переменной req_item

Если вы хотите, чтобы элементы списка ссылались на разные объекты, то надо бы создать эти самые разные объекты.
Они сами по себе не появятся, логично?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808419
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Консоль показывает ТЕКУЩЕЕ состояние переменной.a я это и спрашиваю. Чтобы базу исключить. Нафига тут бд вообще?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808421
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_fkthatКонечно они у тебя идентичны. Ты ведь туда один и тот же объект пихаешь. Букварь в руки и учи, что такое reference types.
Об этом и был вопрос! Как это исправить?

Выше смотри: 21875709 .
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808422
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_fkthatКонечно они у тебя идентичны. Ты ведь туда один и тот же объект пихаешь. Букварь в руки и учи, что такое reference types.
Об этом и был вопрос! Как это исправить?
Написали выше - создавать каждый раз новый объект, заполнять его данными, и его уже добавлять в список. Тогда все объекты в списке будут разные и каждый со своими данными.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808424
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANASIMPLicity_,

Код: c#
1.
2.
3.
4.
5.
6.
var req_items = new List<Req_shipment.Req_Item>();

while (sqlResult.Read())
{
    req_items.Add(new Req_shipment.Req_Item { itemIndex = sqlResult.GetString(2), offerId = sqlResult.GetString(3) });
}



Супер! Спасибо огромное! После доработки и докрутки заработало на раз.

PS Остальные - просто напыщенные снобы...

Тему можно закрывать.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808426
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_PS Остальные - просто напыщенные снобы... мы в шоке от твоего Г. кода. Приходи еще).
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808432
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_skyANASIMPLicity_,

Код: c#
1.
2.
3.
4.
5.
6.
var req_items = new List<Req_shipment.Req_Item>();

while (sqlResult.Read())
{
    req_items.Add(new Req_shipment.Req_Item { itemIndex = sqlResult.GetString(2), offerId = sqlResult.GetString(3) });
}



Супер! Спасибо огромное! После доработки и докрутки заработало на раз.

PS Остальные - просто напыщенные снобы...

Тему можно закрывать.

PS Всё равно ни хрена не понял. Я полагал что <list>.Add(<smthng>) будет сначала создавать новый элемент списка list и наполнять его (свежесозданный элемент) из переменной smthng. Но, похоже, он просто докидывал в list ссылку на smthng ... Ещё раз - Спасибо! А вот на metanit найти разъяснения, увы, так и не смог...
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808433
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123SIMPLicity_PS Остальные - просто напыщенные снобы... мы в шоке от твоего Г. кода. Приходи еще).
Да, от закрытия ПТ скуль много потерял.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808443
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Всё равно ни хрена не понял. Я полагал что <list>.Add(<smthng>) будет сначала создавать новый элемент списка list и наполнять его (свежесозданный элемент) из переменной smthng.
Почему-то новички всё время выдумывают поведение, вместо того, чтобы читать книги и документацию.

В последней чёрным по белому написано, что метод тупо добавляет элемент в конец списка.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808444
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Я полагал чтону, сделай внешний класс более умным и будет сам создавать. Либо выкинь вообще его. Как понадобится AddRange(
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808445
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПочему-то новички всё время выдумывают поведение, вместо того, чтобы читать книги и документацию.
В высоком проектировании это называется "assumption" :-))
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808447
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANASIMPLicity_Всё равно ни хрена не понял. Я полагал что <list>.Add(<smthng>) будет сначала создавать новый элемент списка list и наполнять его (свежесозданный элемент) из переменной smthng.
Почему-то новички всё время выдумывают поведение, вместо того, чтобы читать книги и документацию.

В последней чёрным по белому написано, что метод тупо добавляет элемент в конец списка.
Не, не так:
В последней чёрным по белому написано, что метод тупо добавляет ссылку на элемент в конец списка.

Про документацию: пытался читать тут и тут , и где-то ещё... Но, видимо, оооочень невнимательно ;) ... Надо наверное какой-нибудь аналог литературы типа книг Ицика Бен-Гана (только про C#) поискать...
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808451
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_skyANAпропущено...

Почему-то новички всё время выдумывают поведение, вместо того, чтобы читать книги и документацию.

В последней чёрным по белому написано, что метод тупо добавляет элемент в конец списка.
Не, не так:
В последней чёрным по белому написано, что метод тупо добавляет ссылку на элемент в конец списка.
Опять выдумываете, там так не написано.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808458
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

Код: 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.
using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int>(3);
            int item;

            list.Add(item = 1);
            list.Add(item = 2);
            list.Add(item = 3);
            item = 4;

            for (var i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list[i]);
            }

            Console.ReadKey();
        }
    }
}



Что будет написано в консоли?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808462
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_В последней чёрным по белому написано, что метод тупо добавляет ссылку на элемент в конец списка.
Так в случае reference type ты добавляешь не сам элемент (он живет где-то в памяти), а типа как указатель на него. Это типа как ты пришел в какой-нибудь казенный дом, ну, допустим, в ФНС, и там в какой-то список записали тебя и твой адрес. Вот это они добавили ссылку на тебя и на твой адрес к себе в список. Если ты придешь туда еще раз и они тебя снова запишут, то они добавят еще одну ссылку на тебя, но ты при этом остаешься сам собой и обе ссылки указывают на одного и того же тебя. Вот так и работает любой reference type. Если переменная объявлена как reference type, то в переменной хранится не сам объект, а ссылка на этот объект. При копировании такой переменной куда-либо, тоже копируется не объект, а копируется только ссылка и обе переменных будут указывать на один и тот же объект. Я понятно объяснил?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808465
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто будет написано в консоли?
Ты сейчас человека вообще запутаешь, он еще классы не осилил как следует, а ты ему уже про структуры
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808549
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANASIMPLicity_,

Код: 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.
using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int>(3);
            int item;

            list.Add(item = 1);
            list.Add(item = 2);
            list.Add(item = 3);
            item = 4;

            for (var i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list);
            }

            Console.ReadKey();
        }
    }
}



Что будет написано в консоли?

Попробую неглядя (похоже, это как раз то, что было в моём случае):
4
4
4

PS Как выполняется list.Add(item = 1); в плане именно ( item = 1 ) не уверен, НО полагаю, что сначала выполняется присвоение а потом list.add() . Для меня это вершина говнокода, для других - "синтаксический сахар" (аналогично объявлению переменной с присвоением и проч...)

PPS Кстати, касательно "Опять выдумываете, там так не написано.", по первой ссылке как раз и написано:

List<T>.Add(T) MethodПараметры
item
T
Объект, добавляемый в конец коллекции List<T>.
Благодаря Вашему примеру , теперь читаю интерпретирую эту фразу по-другому. Возможно, я оперирую неправильными понятиями или [i]"выражаюсь не теми словами"
. ;-)
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808552
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_skyANASIMPLicity_,

Код: 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.
using System;
using System.Collections.Generic;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var list = new List<int>(3);
            int item;

            list.Add(item = 1);
            list.Add(item = 2);
            list.Add(item = 3);
            item = 4;

            for (var i = 0; i < list.Count; i++)
            {
                Console.WriteLine(list);
            }

            Console.ReadKey();
        }
    }
}



Что будет написано в консоли?

Попробую неглядя (похоже, это как раз то, что было в моём случае):
4
4
4

PS Как выполняется list.Add(item = 1); в плане именно ( item = 1 ) не уверен, НО полагаю, что сначала выполняется присвоение а потом list.add() . Для меня это вершина говнокода, для других - "синтаксический сахар" (аналогично объявлению переменной с присвоением и проч...)

PPS Кстати, касательно "Опять выдумываете, там так не написано.", по первой ссылке как раз и написано:

List<T>.Add(T) MethodПараметры
item
T
Объект, добавляемый в конец коллекции List<T>.
Благодаря Вашему примеру , теперь читаю интерпретирую эту фразу по-другому. Возможно, я оперирую неправильными понятиями или [i]"выражаюсь не теми словами"
. ;-)
ответ неверный, тип int (Int32) это тип значения, он не передается по ссылке, а передается по значению. Переменная int item объявлена как локальная, значит размещается в стеке, добавляя её в массив, значение из стека копируется в кучу по адресу массива + (индекс * 4).
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808558
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто будет написано в консоли?

Не сцы симлисити, щас мы его уделаем.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private static void Main(string[] args)
{
    var list = new List<Action>();
    for (var i = 0; i < 10; i++)
    {
        list.Add(() => Console.WriteLine(i));
    }
    foreach (var act in list)
    {
        act();
    }
}



skyANA, что будет написано в консоли?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808562
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatSIMPLicity_В последней чёрным по белому написано, что метод тупо добавляет ссылку на элемент в конец списка.
Так в случае reference type ты добавляешь не сам элемент (он живет где-то в памяти), а типа как указатель на него. Это типа как ты пришел в какой-нибудь казенный дом, ну, допустим, в ФНС, и там в какой-то список записали тебя и твой адрес. Вот это они добавили ссылку на тебя и на твой адрес к себе в список. Если ты придешь туда еще раз и они тебя снова запишут, то они добавят еще одну ссылку на тебя, но ты при этом остаешься сам собой и обе ссылки указывают на одного и того же тебя. Вот так и работает любой reference type. Если переменная объявлена как reference type, то в переменной хранится не сам объект, а ссылка на этот объект. При копировании такой переменной куда-либо, тоже копируется не объект, а копируется только ссылка и обе переменных будут указывать на один и тот же объект. Я понятно объяснил?

Неа. Непонятно. Именно так ВЕЗДЕ объясняют.

А мне нужен был быстрый результат простой пример. Брильянт допилен огранён и уже попал в оправу и в понедельник засияет (в одной из туевой хучи мелких говнопроцедур, которые фактически являются интерфейсом между 2008 скулем и JSON-ом)

PS Вопрос-то возник не в плане referenced type а в плане метода Add() для объекта типа list ....

Оффтоп: в паскале для этого есть (был?) поинтер,- явное указание на то, что ты юзаещь ссылку. Кстати, стопроцентно ложился в исполняемый код x86-ой архитектуры. Можно было зафигачить ещё и поинтер на поинтер. В сях, по-моему, то же самое, но вместо ^ используется (использовалась?) * ...

PPS Мой мозг развращён бэйсиком, ассемблером, фортраном, паскалем, си, пиэлем, тэскулем, ... . Сишарп в нём уживается тяжело, но выбора, увы, нет,- с точки зрения создания простейшего говнокода в винде и переносимости с тачки на тачку он идеален. Почти идеален. Эдакая помесь бэйсика, асма, сей и зависти к яве и паскалю. 8-q
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808565
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_,

Вот, смотри.

Код: c#
1.
2.
3.
4.
5.
class A {}

var x = new A(); // создали объект, х ссылается на него
var y = x; // в у мы просто скопировали х, т.е. ссылку, поэтому теперь у ссылается туда же куда и х
var z = x; // сделали то же самое что шаг назад но с z - теперь все х,у,z ссылаются на один и тот же объект



а теперь представь, что х - это объект который ты создавал в своём изначальном коде, а y и z - это элементы списка, потому что элементы списка, это по сути такие же переменные, просто внутри списка. в твоем коде в итоге в конце все ссылки, хранящиеся в списке ссылались на один и тот же объект.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808567
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesSIMPLicity_пропущено...


Попробую неглядя (похоже, это как раз то, что было в моём случае):
4
4
4

PS Как выполняется list.Add(item = 1); в плане именно ( item = 1 ) не уверен, НО полагаю, что сначала выполняется присвоение а потом list.add() . Для меня это вершина говнокода, для других - "синтаксический сахар" (аналогично объявлению переменной с присвоением и проч...)

PPS Кстати, касательно "Опять выдумываете, там так не написано.", по первой ссылке как раз и написано:

пропущено...

Благодаря Вашему примеру , теперь читаю интерпретирую эту фразу по-другому. Возможно, я оперирую неправильными понятиями или "выражаюсь не теми словами" . ;-)
ответ неверный, тип int (Int32) это тип значения, он не передается по ссылке, а передается по значению. Переменная int item объявлена как локальная, значит размещается в стеке, добавляя её в массив, значение из стека копируется в кучу по адресу массива + (индекс * 4).

Всё, мой мозг вынесен нахрен.

Хорошо, что есть вижуалстудия с дебагером.

PS Я про это читал, но в уме всё равно не укладывается. К тому же разговоры про сборщик мусора, стек и кучу, меня умучили. И с моей точки зрения, нет (хорошо, почти нет) разницы между char(255), string, int32 в плане хранения . Со списками раньше не работал. В команде писать на c# большой говнокод тоже бы не стал (из-за возможного пересечения типов и удолбищности версионности).
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808569
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatskyANAЧто будет написано в консоли?

Не сцы симлисити, щас мы его уделаем.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private static void Main(string[] args)
{
    var list = new List<Action>();
    for (var i = 0; i < 10; i++)
    {
        list.Add(() => Console.WriteLine(i));
    }
    foreach (var act in list)
    {
        act();
    }
}



skyANA, что будет написано в консоли?

Блин!, я даже запускать такое у себя не буду - мой комп стопудово подавится
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808585
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatskyANA, что будет написано в консоли?
Ой-вэй, задачи на замыкание-захват. Кто пойдет к доске?
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808602
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныfkthatskyANA, что будет написано в консоли?
Ой-вэй, задачи на замыкание-захват. Кто пойдет к доске?
Это задача с подъ...бкой, на самом деле :-)
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808663
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatЭто задача с подъ...бкой, на самом деле :-)
Ну, что делать с этой подъ...бкой, знает даже решарпер. И предлагает соответствующие меры.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808664
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры ПавловныfkthatЭто задача с подъ...бкой, на самом деле :-)
Ну, что делать с этой подъ...бкой, знает даже решарпер. И предлагает соответствующие меры.
А что решарпер предлагает? Я им просто не пользуюсь, вот и интересно. Там как раз в свое время поведение этой штуки в "норму" и привели. Хотя, кажется, в конфигах можно как-то настроить на старое поведение.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808665
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловны,

а, все, понял.Предлагает локальную переменную добавить. типа
Код: c#
1.
var j = i;
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808713
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthatskyANAЧто будет написано в консоли?

Не сцы симлисити, щас мы его уделаем.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
private static void Main(string[] args)
{
    var list = new List<Action>();
    for (var i = 0; i < 10; i++)
    {
        list.Add(() => Console.WriteLine(i));
    }
    foreach (var act in list)
    {
        act();
    }
}




skyANA, что будет написано в консоли?

Тоже самое, что и тут:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
var list = [];
for (var i = 0; i < 10; i++) {
    list.push(function() { console.log(i); });
}
    
for (var k in list) {
    list[k]();
}
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808716
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_PPS Кстати, касательно "Опять выдумываете, там так не написано.", по первой ссылке как раз и написано:

List<T>.Add(T) MethodПараметры
item
T
Объект, добавляемый в конец коллекции List<T>.
Это не тоже самое, что и
SIMPLicity_В последней чёрным по белому написано, что метод тупо добавляет ссылку на элемент в конец списка.
...
Рейтинг: 0 / 0
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #39808717
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_А мне нужен был быстрый результат простой пример.
А по первой ссылке не такой пример?

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Example
{
    public static void Main()
    {
        // Create a list of parts.
        List<Part> parts = new List<Part>();

        // Add parts to the list.
        parts.Add(new Part() {PartName="crank arm", PartId=1234});
        parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
        parts.Add(new Part() { PartName = "regular seat", PartId = 1434 });
        parts.Add(new Part() { PartName = "banana seat", PartId = 1444 });
        parts.Add(new Part() { PartName = "cassette", PartId = 1534 });
        parts.Add(new Part() { PartName = "shift lever", PartId = 1634 });
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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