我有一个 XNA 3.0 项目,它在 VS2008 中编译得很好,但是在 VS2010 中产生了编译错误(使用 XNA 4.0 CTP)。错误:
不能在匿名方法、lambda 表达式或查询表达式中使用固定的本地“depthPtr”
depthPtr
是一个fixed float*
到一个数组中,它在一个Parallel.For
lambda 表达式中使用System.Threading
。正如我所说,这在 VS2008 上编译和运行得很好,但在 VS2010 上却没有,即使针对 .NET 3.5 也是如此。
这在 .NET 4.0 中是否发生了变化,即便如此,当我选择 .NET 3.5 作为目标框架时,它不应该仍然编译吗?在 Google 和 Bing 中搜索“不能使用固定本地”一词只会产生一个(无用的)结果。
如果这种情况发生了变化,这是什么原因?我可以想象fixed
在闭包中捕获指针类型会有点奇怪,这是为什么呢?所以我猜这是不好的做法?在有人问之前:不,指针的使用在这里并不是绝对关键的。不过我还是想知道:)
编辑: 根据要求,重现错误的代码示例(显然不是来自我的程序):
static unsafe void Main(string[] args)
{
float[] array = new float[10];
fixed (float* ptr = array)
{
Parallel.For(0, 10, i =>
{
ptr[i] = i;
});
}
}
以上在 VS2008 中编译(嗯,除了对 的引用Parallel
,但任何其他 lambda 表达式都可以),但在 VS2010 中没有。