|
Вопрос по IEnumerable
|
|||
---|---|---|---|
#18+
Что происходит за кадром? 1. в бесконечном цикле выводит 0. пишут, что из-за того, что у List GetEnumerator() возвращает структуру, и внутренний current не инкрементируется Код: c# 1. 2. 3. 4. 5.
2. а так работает ожидаемо. т.е. тут GetEnumerator() уже возвращает не структуру? или что произошло? Код: c# 1. 2. 3. 4. 5.
3. тоже работает ожидаемо. а можно как-то "сломать", чтобы было как в п.1? Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2017, 21:11 |
|
Вопрос по IEnumerable
|
|||
---|---|---|---|
#18+
п.3 "сломал". видно из-анонимного типа в п.1 как-то "не точно" вывод типа произошел? Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2017, 21:40 |
|
Вопрос по IEnumerable
|
|||
---|---|---|---|
#18+
_rumbler_, в п.1 в цикле x1.Items каждый раз возвращает новую копию структуры в п.2 в x2.Items лежит объект типа IEnumerator<T>, который находится в куче и является ссылочным (читай про упаковку/boxing) в п.3 ты обращаешься в цикле к одной и той же структуре, лежащей в стеке п.3 ты сломал, потому что в цикле структуру приведением к типу (IEnumerator) каждый раз упаковываешь, в результате создается копия исходной структуры в памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 10:43 |
|
Вопрос по IEnumerable
|
|||
---|---|---|---|
#18+
Pallaris_rumbler_, в п.1 в цикле x1.Items каждый раз возвращает новую копию структуры в п.2 в x2.Items лежит объект типа IEnumerator<T>, который находится в куче и является ссылочным (читай про упаковку/boxing) в п.3 ты обращаешься в цикле к одной и той же структуре, лежащей в стеке п.3 ты сломал, потому что в цикле структуру приведением к типу (IEnumerator) каждый раз упаковываешь, в результате создается копия исходной структуры в памяти чем принципиально отличается п.1 и п.3, что так происходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 10:54 |
|
Вопрос по IEnumerable
|
|||
---|---|---|---|
#18+
_rumbler_Pallaris_rumbler_, в п.1 в цикле x1.Items каждый раз возвращает новую копию структуры в п.2 в x2.Items лежит объект типа IEnumerator<T>, который находится в куче и является ссылочным (читай про упаковку/boxing) в п.3 ты обращаешься в цикле к одной и той же структуре, лежащей в стеке п.3 ты сломал, потому что в цикле структуру приведением к типу (IEnumerator) каждый раз упаковываешь, в результате создается копия исходной структуры в памяти чем принципиально отличается п.1 и п.3, что так происходит? Why anonymous types Equals implementation compares fields? : Anonymous type instances are immutable data values without behavior or identity. Т.к. он immutable, то обращение в п.1 обращение к полю Items приводит к созданию в памяти новой структуры типа List<int>.Enumerator. В п.3 происходит обращение к одному и тому же объекту List<int>.Enumerator. В п.2 же у этого объекта вообще тип IEnumerator<int> ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2017, 12:14 |
|
|
start [/forum/topic.php?fid=20&msg=39523216&tid=1399707]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
55ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 292ms |
total: | 437ms |
0 / 0 |