Почему я должен копировать «this» при использовании LINQ в структуре (и это нормально, если я это сделаю)?

Код ниже содержит простой запрос LINQ внутри неизменяемой структуры.

struct Point
{
   static readonly List NeighborIndexes;
   //and other readonly fields!

    public IEnumerable GetEdges()
    {
        return from neighborIndex in NeighborIndexes;
             select GetEdge(neighborIndex);
    }
}

Это не компилируется.

Анонимные методы, лямбда-выражения и выражения запросов внутри структур не могут получить доступ к членам экземпляра 'этот', Подумайте о копированииэтот' к локальной переменной за пределами анонимного метода, лямбда-выражения или выражения запроса и использования вместо этого локального.

Кто-нибудь знает, почему это не разрешено?

Исправление, которое предлагает сообщение, работает нормально:

    public IEnumerable GetEdges()
    {
        var thisCopy = this;

        return from neighborIndex in NeighborIndexes;
             select thisCopy.GetEdge(neighborIndex);
    }

Но это стандартная практика? Есть ли причины для того, чтобы в структурах не было подобных запросов? (В более широком смысле создание копии не беспокоит меня по производительности).

Ответы на вопрос(1)

Ваш ответ на вопрос