Ho un progetto XNA 3.0 compilato correttamente in VS2008, ma che fornisce errori di compilazione in VS2010 (con XNA 4.0 CTP). L'errore:"Impossibile utilizzare locale fisso nell'espressione lambda"
Cannot use fixed local 'depthPtr' inside an anonymous method, lambda expression, or query expression
depthPtr
è un fixed float*
in un array, che viene utilizzato all'interno di un'espressione Parallel.For
lambda da System.Threading
. Come ho detto, questo è stato compilato e funzionava bene su VS2008, ma non su VS2010, anche quando si utilizza .NET 3.5.
Questo è cambiato in .NET 4.0, e anche così, non dovrebbe ancora essere compilato quando scelgo .NET 3.5 come framework di destinazione? La ricerca del termine "Can not use fixed local" restituisce esattamente un risultato (inutile), sia in Google che in Bing.
Se questo è cambiato, qual è la ragione di questo? Posso immaginare che catturare un puntatore tipo fixed
in una chiusura potrebbe essere un po 'strano, è per questo? Quindi immagino che questa sia una cattiva pratica? E prima che qualcuno chieda: no, l'uso dei puntatori non è assolutamente critico qui. Vorrei ancora sapere però :)
EDIT: Come richiesto, un esempio di codice (non dal mio programma, ovviamente) che riproduce l'errore:
static unsafe void Main(string[] args)
{
float[] array = new float[10];
fixed (float* ptr = array)
{
Parallel.For(0, 10, i =>
{
ptr[i] = i;
});
}
}
Le compilazioni di cui sopra in VS2008 (beh, a parte il riferimento a Parallel
, ma qualsiasi altra espressione lambda lo farà), ma non in VS2010.
puoi pubblicare il codice che causa l'errore. – luke
Beh, non c'è molto da pubblicare, è esattamente quello che ha detto l'errore: l'uso di un puntatore all'interno di un'espressione di lamdba. – JulianR
Ancora, pubblicare un breve ma completo codice che possiamo sperimentare sarebbe una buona cosa (tm). –