Der Code unterhalb enthält eine einfache LINQ-Abfrage innerhalb einer unveränderlichen Struktur.Warum muss ich "dies" kopieren, wenn Sie LINQ in einer Struktur verwenden (und ist es OK, wenn ich das tue)?
struct Point
{
static readonly List</*enum*/> NeighborIndexes;
//and other readonly fields!
public IEnumerable<FlatRhombPoint> GetEdges()
{
return from neighborIndex in NeighborIndexes;
select GetEdge(neighborIndex);
}
}
Es kompiliert nicht.
Anonyme Methoden, Lambda-Ausdrücke und Abfrageausdrücke innerhalb von Strukturen können nicht auf Instanzmitglieder von 'this' zugreifen. Ziehen Sie in Erwägung, 'this' in eine lokale Variable außerhalb der anonymen Methode lambda Ausdruck oder Abfrageausdruck zu kopieren und stattdessen local zu verwenden.
Weiß jemand, warum dies nicht erlaubt ist?
Die die Meldung beheben schlägt funktioniert gut:
public IEnumerable<FlatRhombPoint> GetEdges()
{
var thisCopy = this;
return from neighborIndex in NeighborIndexes;
select thisCopy.GetEdge(neighborIndex);
}
Aber ist dies gängige Praxis? Gibt es Gründe, solche Anfragen in Strukturen nicht zu haben? (In dem größeren Schema von Dingen, die eine Kopie machen, macht mich das als solche nicht leistungsmäßig beunruhigend).
Warum nicht einfach auswählen this.GetEdge (NeighborIndex) ;? – antinescience
+1 Interessante Frage. – feralin
@antinescience, erklären sie in der Frage, dass sie einen Fehler bekommen, wenn sie "dieses" benutzen. –