下面的代码在不可变结构中包含一个简单的 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);
}
但这是标准做法吗?是否有理由在结构中没有这样的查询?(在更大的计划中,制作副本并不会让我担心性能方面的问题)。