Il codice contiene una query LINQ semplice all'interno di una struttura immutabile.Perché devo copiare "questo" quando uso LINQ in una struttura (e va bene se lo faccio)?
struct Point
{
static readonly List</*enum*/> NeighborIndexes;
//and other readonly fields!
public IEnumerable<FlatRhombPoint> GetEdges()
{
return from neighborIndex in NeighborIndexes;
select GetEdge(neighborIndex);
}
}
Non viene compilato.
I metodi anonimi, le espressioni lambda e le espressioni di query all'interno delle strutture non possono accedere ai membri dell'istanza di "this". Si consiglia di copiare 'this' su una variabile locale esterna al metodo anonimo, lambda espressione o espressione di query e utilizzare invece il locale.
Qualcuno sa perché questo non è consentito?
Il fissare il messaggio suggerisce funziona bene:
public IEnumerable<FlatRhombPoint> GetEdges()
{
var thisCopy = this;
return from neighborIndex in NeighborIndexes;
select thisCopy.GetEdge(neighborIndex);
}
Ma è questa una pratica standard? Ci sono motivi per non avere query come questa nelle strutture? (Nel più grande schema di cose che fanno una copia non mi preoccupo delle prestazioni in quanto tale).
Perché non usare solo selezionare this.GetEdge (neighborIndex) ;? – antinescience
+1 Interessante domanda. – feralin
@antinescience, spiegano nella domanda che ottengono un errore quando si usa 'this'. –