powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
22 сообщений из 47, страница 2 из 2
есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
    #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
22 сообщений из 47, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / есть список в списке. Наполняется одинаковыми значениями. Как уйти от ссылок к значениям?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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