显然你不能使用关键字"这个"在结构中的方法中。 请注意,在下面的示例中,我没有明确键入"这个"但是当我引用属性" X"或" Y"。
我的结构:
public struct Coord
{
public int X;
public int Y;
public Coord(int x, int y)
{
X = x;
Y = y;
}
// some other methods omitted
public List<int> GetPossibles()
{
return LaurenceAI.Values.Where(n => LaurenceAI.Possibilities[X, Y, n]).ToList();
}
}
用法示例:
foreach(int numeral in targetCoord.GetPossibles())
{
//do stuff
}
错误:
错误1结构体内的匿名方法,lambda表达式和查询表达式无法访问&#39; this&#39;的实例成员。考虑复制这个&#39;到匿名方法,lambda表达式或查询表达式之外的局部变量,而使用本地变量。 C:\ Projects \ Sodoku \ SodokuSolver \ Sodoku \ LaurenceAI.cs 367 74 Sodoku
问题:
答案 0 :(得分:4)
原因是结构是按值传递的,而不是通过引用传递的。在此上下文中使用this
通常不会导致您想要的内容 - 它将访问副本的this
指针,而不是外部对象,并且在任何时候它都会让您感到困惑您所做的作业不会在外部通话中显示。它在这种特殊情况下很烦人,但总的来说它会阻止更多奇怪的错误。
错误消息实际上为您提供了一个相当合理的解决方案 - 首先复制值。做类似的事情:
public List<int> GetPossibles()
{
var localX = X;
var localY = Y;
return LaurenceAI.Values.Where(n => LaurenceAI.Possibilities[localX, localY, n]).ToList();
}