以下のコードには、不変の構造体内に単純なLINQクエリが含まれています。
struct Point
{
static readonly List</*enum*/> NeighborIndexes;
//and other readonly fields!
public IEnumerable<FlatRhombPoint> GetEdges()
{
return from neighborIndex in NeighborIndexes;
select GetEdge(neighborIndex);
}
}
コンパイルされません。
構造体内の匿名メソッド、ラムダ式、およびクエリ式は、「this」のインスタンスメンバーにアクセスできません。'this'を無名メソッド、ラムダ式、またはクエリ式の外部のローカル変数にコピーし、代わりにローカルを使用することを検討してください。
なぜこれが許可されないのか誰かが知っていますか?
メッセージが示唆する修正は正常に機能します:
public IEnumerable<FlatRhombPoint> GetEdges()
{
var thisCopy = this;
return from neighborIndex in NeighborIndexes;
select thisCopy.GetEdge(neighborIndex);
}
しかし、これは標準的な方法ですか?構造体にこのようなクエリがない理由はありますか?(より大きなスキームでは、コピーを作成しても、パフォーマンスの面で心配する必要はありません)。