Incorrect loop bound in SizeOptIListSelectIterator.ToList
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 64/100
Direzione di ricerca
Trova SizeOptIListSelectIterator<TSource, TResult>.ToList() nel codice sorgente di .NET runtime e leggi l’implementazione dell’iteratore introdotta nella PR #118156. Riproduci il problema con <UseSizeOptimizedLinq>true</UseSizeOptimizedLinq> usando l’esempio di reflection fornito. Il lavoro è completato quando l’override restituisce gli elementi selezionati e il risultato corrisponde alla normale enumerazione della query; l’issue suggerisce di correggere o rimuovere questo percorso non pubblico.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Description
SizeOptIListSelectIterator<TSource, TResult>.ToList() checks the destination list’s Count immediately after constructing it with a capacity. Since Count is zero, the loop never executes and the override returns an empty list for a nonempty source.
Admittedly, this path is non-public and functionally dead, but it hides a ticking time bomb, so would be nice to fix for good hygiene (or remove altogether)
Reproduction Steps
With true
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
IEnumerable<int> query = new[] { 1, 2, 3 }.Select(x => x * 10);
MethodInfo method = query.GetType().GetMethod(
"ToList",
BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
?? throw new InvalidOperationException("ToList override not found");
List<int> result = (List<int>)(method.Invoke(query, null)
?? throw new InvalidOperationException("ToList returned null"));
Console.WriteLine(query.GetType().Name);
Console.WriteLine($"Reflection: [{string.Join(", ", result)}]");
Console.WriteLine($"Public API: [{string.Join(", ", query.ToList())}]");
Expected behavior
printing [10, 20, 30], matching enumeration of the query
Actual behavior
prints []
Regression?
The erroneous loop was included when this iterator was introduced in #118156
Known Workarounds
No workaround is needed
Configuration
Windows 10, x64
Reproduced on .NET 10, 11 rc3 and main
Other information
List<TResult> list = new List<TResult>(_source.Count);
for (int i = 0; i < list.Count; i++)
{
list.Add(_selector(_source[i]));
}
return list;
The constructor initializes Capacity, not Count
- Lingua principale
- C#
- Stelle
- 18.4k
- Fork
- 5.8k
- Merge medio
- 2g 12h
- PR unite (30g)
- 579
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di dotnet/runtime
-
DbTransaction.SupportsSavepoints docs say Release/ReleaseAsync are expected to throw, but they are no-ops by designForse già presa @alaricd l’ha presa 1 giorno fa. Apertaarea-System.Transactions untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
dotnet/runtime#137040 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
FileSystemGlobbing: Matcher throws ArgumentOutOfRangeException when the rootDir is the same value as the fileForse già presa @makazeu l’ha presa 1 giorno fa. Apertaarea-Extensions-FileSystem
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
dotnet/runtime#136989 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Configuration binder source generator emits unqualified List<T> when binding arrays without implicit usingsForse già presa @makazeu l’ha presa 1 giorno fa. Apertaarea-Extensions-Configuration bug source-generator
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
dotnet/runtime#136972 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
[wasi] .NET 10: WasmEnableSIMD with AOT fails because WasiApp.targets has -msimd128 commented outApertaarea-Build-mono untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
PropertyChangedEventArgs should have a nice DebuggerDisplayForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaarea-System.ComponentModel untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
dotnet/runtime#136608 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di dotnet/runtime
Issue simili
-
needs-triage
Difficoltà 1/5 1-3 ore Idoneità per principianti 76/100
Azure/azure-sdk-for-net#64658 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
dotnet/aspnetcore#70370 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
NethermindEth/nethermind#15684 ·
I maintainer di solito rispondono entro 1 giorno
-
area/ai-assistant squad/flyt
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
Altinn/altinn-studio#21798 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
SubtitleEdit/subtitleedit#16699 ·
I maintainer di solito rispondono entro 1 giorno