Легоки кода содержат простой запрос LINQ внутри неизменяемой структуры.
struct Point
{
static readonly List</*enum*/> NeighborIndexes;
//and other readonly fields!
public IEnumerable<FlatRhombPoint> GetEdges()
{
return from neighborIndex in NeighborIndexes;
select GetEdge(neighborIndex);
}
}
Он не компилируется.
Анонимные методы, лямбда-выражения и выражения запроса внутри structs не могут получить доступ к членам экземпляра 'this'. Рассмотрите возможность копирования 'this' для локальной переменной вне анонимного метода, лямбда выражение или выражение запроса и вместо этого используется локальная.
Кто-нибудь знает, почему это не разрешено?
Исправлено сообщение о том, что сообщение работает нормально:
public IEnumerable<FlatRhombPoint> GetEdges()
{
var thisCopy = this;
return from neighborIndex in NeighborIndexes;
select thisCopy.GetEdge(neighborIndex);
}
Но эта стандартная практика? Есть ли причины, по которым у таких запросов нет подобных запросов? (В более крупной схеме вещей, делающих копию, меня не волнует как результат).