Tengo un proyecto XNA 3.0 que se compiló muy bien en VS2008, pero que da errores de compilación en VS2010 (con XNA 4.0 CTP). El error:"No se puede usar la expresión lambda interna local fija"
Cannot use fixed local 'depthPtr' inside an anonymous method, lambda expression, or query expression
depthPtr
es un fixed float*
en una matriz, que se utiliza dentro de una expresión Parallel.For
lambda de System.Threading
. Como dije, esto compiló y ejecutó muy bien en VS2008, pero no en VS2010, incluso cuando se dirige a .NET 3.5.
¿Esto ha cambiado en .NET 4.0, y aún así, no debería compilarse cuando elijo .NET 3.5 como el marco de destino? La búsqueda del término "No se puede usar local fijo" arroja exactamente un resultado (inútil), tanto en Google como en Bing.
Si esto ha cambiado, ¿cuál es el motivo? Me imagino que capturar un tipo de puntero fixed
en un cierre podría ser un poco extraño, ¿es por eso? ¿Entonces supongo que esto es una mala práctica? Y antes de que nadie pregunte: no, el uso de punteros no es absolutamente crítico aquí. Todavía me gustaría saber, sin embargo :)
EDIT: a lo solicitado, un ejemplo de código (no de mi programa, obviamente) que reproduce el error:
static unsafe void Main(string[] args)
{
float[] array = new float[10];
fixed (float* ptr = array)
{
Parallel.For(0, 10, i =>
{
ptr[i] = i;
});
}
}
Las compilaciones anteriores en VS2008 (bien, aparte de la referencia a Parallel
, pero cualquier otra expresión lambda lo hará), pero no en VS2010.
puede publicar el código que causa el error. – luke
Bueno, no hay mucho para publicar, es exactamente lo que dijo el error: el uso de un puntero dentro de una expresión lamdba. – JulianR
Aún así, publicar un fragmento de código breve pero completo con el que podamos experimentar sería una buena cosa (tm). –