Ich habe ein XNA 3.0-Projekt, das in VS2008 gut kompiliert, aber das kompiliert Fehler in VS2010 (mit XNA 4.0 CTP). Der Fehler:"Kann nicht festen lokalen innerhalb Lambda-Ausdruck verwenden"
Cannot use fixed local 'depthPtr' inside an anonymous method, lambda expression, or query expression
depthPtr
ist ein fixed float*
in ein Array, das aus System.Threading
innerhalb eines Parallel.For
Lambda-Ausdruck verwendet wird. Wie gesagt, dies kompiliert und lief gut auf VS2008, aber nicht auf VS2010, auch wenn es .NET 3.5 anvisiert.
Hat sich das in .NET 4.0 geändert und sollte es trotzdem noch kompilieren, wenn ich .NET 3.5 als Zielframework wähle? Die Suche nach dem Begriff "Kann nicht lokal fixieren" ergibt genau ein (nutzloses) Ergebnis, sowohl bei Google als auch bei Bing.
Wenn sich das geändert hat, was ist der Grund dafür? Ich kann mir vorstellen, einen fixed
Zeiger-Typ in einem Verschluss zu erfassen, könnte ein bisschen seltsam werden, ist das warum? Also ich vermute, das ist eine schlechte Übung? Und bevor jemand fragt: Nein, der Einsatz von Zeigern ist hier nicht absolut kritisch. Ich möchte noch wissen, aber :)
EDIT: Wie gewünscht, ein Codebeispiel (nicht von meinem Programm, natürlich), der den Fehler reproduziert:
static unsafe void Main(string[] args)
{
float[] array = new float[10];
fixed (float* ptr = array)
{
Parallel.For(0, 10, i =>
{
ptr[i] = i;
});
}
}
Die oben compiliert in VS2008 (gut, abgesehen von der Referenz auf Parallel
, aber jeder andere Lambda-Ausdruck wird tun, aber nicht in VS2010.
können Sie bitte den Code posten, der den Fehler verursacht. – luke
Nun, es gibt nicht viel zu posten, es ist genau das, was der Fehler sagte: die Verwendung eines Zeigers innerhalb eines Lamdba-Ausdrucks. – JulianR
Noch ein kurzes, aber vollständiges Stück Code, mit dem wir experimentieren können, wäre ein Good Thing (tm). –