下面的代码在不可变结构中包含一个简单的 LINQ 查询。
struct Point
{
   static readonly List</*enum*/> NeighborIndexes;
   //and other readonly fields!
    public IEnumerable<FlatRhombPoint> GetEdges()
    {
        return from neighborIndex in NeighborIndexes;
             select GetEdge(neighborIndex);
    }
}
它不编译。
结构中的匿名方法、lambda 表达式和查询表达式无法访问“this”的实例成员。考虑将“this”复制到匿名方法、lambda 表达式或查询表达式之外的局部变量,并改用本地变量。
有谁知道为什么不允许这样做?
消息建议的修复工作正常:
    public IEnumerable<FlatRhombPoint> GetEdges()
    {
        var thisCopy = this;
        return from neighborIndex in NeighborIndexes;
             select thisCopy.GetEdge(neighborIndex);
    }
但这是标准做法吗?是否有理由在结构中没有这样的查询?(在更大的计划中,制作副本并不会让我担心性能方面的问题)。