Tôi có một dự án XNA 3.0 được biên dịch tốt trong VS2008, nhưng cho phép biên dịch các lỗi trong VS2010 (với XNA 4.0 CTP). Lỗi:"Không thể sử dụng biểu thức lambda cục bộ cố định"
Cannot use fixed local 'depthPtr' inside an anonymous method, lambda expression, or query expression
depthPtr
là một fixed float*
vào một mảng, được sử dụng trong một biểu thức lambda Parallel.For
từ System.Threading
. Như tôi đã nói, điều này biên dịch và chạy tốt trên VS2008, nhưng nó không trên VS2010, ngay cả khi nhắm mục tiêu .NET 3.5.
Điều này đã thay đổi trong .NET 4.0, và thậm chí như vậy, không nên nó vẫn biên dịch khi tôi chọn .NET 3.5 làm khung mục tiêu? Tìm kiếm cụm từ "Không thể sử dụng cố định địa phương" sản lượng chính xác một (vô dụng) kết quả, cả trong Google và Bing.
Nếu điều này đã thay đổi, lý do cho điều này là gì? Tôi có thể tưởng tượng bắt một loại con trỏ fixed
trong một đóng cửa có thể có được một chút lạ, đó là lý do tại sao? Vì vậy, tôi đoán đây là thực hành xấu? Và trước khi bất cứ ai hỏi: không, việc sử dụng con trỏ không hoàn toàn quan trọng ở đây. Tôi vẫn muốn biết mặc dù :)
EDIT: Theo yêu cầu, mẫu mã (không phải từ chương trình của tôi, rõ ràng) nhằm tái tạo lỗi:
static unsafe void Main(string[] args)
{
float[] array = new float[10];
fixed (float* ptr = array)
{
Parallel.For(0, 10, i =>
{
ptr[i] = i;
});
}
}
Các biên dịch nêu trên trong VS2008 (tốt, ngoài tham chiếu đến Parallel
, nhưng bất kỳ biểu thức lambda nào khác sẽ làm), nhưng không có trong VS2010.
bạn có thể vui lòng đăng mã gây ra lỗi không. – luke
Vâng, không có nhiều để đăng bài, đó là chính xác những gì lỗi nói: việc sử dụng một con trỏ bên trong một biểu thức lamdba. – JulianR
Tuy nhiên, việc đăng một đoạn mã ngắn nhưng đầy đủ mà chúng tôi có thể thử nghiệm sẽ là một điều tốt (tm). –