[c#] Trappola variabile esterna


1 Answers

Qualcosa di simile a

foreach (var s in strings)
    var x = results.Where(r => (r.Text).Contains(s));

Non fornirà i risultati che ti aspetti perché Contains non viene eseguito per ogni iterazione. Tuttavia, l'assegnazione di s ad una variabile temporanea all'interno del ciclo risolverà questo problema.

Question

Cos'è esattamente la trappola variabile esterna? Spiegazione ed esempi in C # sono apprezzati.

EDIT: Incorporando diktat di Jon Skeet :)

Eric Lippert sulla trappola variabile esterna




Vale la pena notare che questa trappola esisteva anche per i cicli foreach ma è stata modificata da C # 5.0, cioè all'interno di chiusure foreach loop ora si chiudono su una nuova copia della variabile loop ogni volta. Quindi il seguente codice:

var values = new List<int>() { 100, 110, 120 };
var funcs = new List<Func<int>>();
foreach (var v in values)
    funcs.Add(() => v);
foreach (var f in funcs)
    Console.WriteLine(f());

Stampa 120 120 120 <C # 5.0 , ma 100 110 120 > = C # 5.0

Tuttavia, i loop si comportano ancora allo stesso modo.




Related



Tags

c# c#   linq