मेरे पास एक एक्सएनए 3.0 प्रोजेक्ट है जो VS2008 में ठीक है, लेकिन यह वीएस -2010 (एक्सएनए 4.0 सीटीपी के साथ) में संकलन त्रुटियों को देता है। त्रुटि:"लैम्ब्डा अभिव्यक्ति के अंदर निश्चित स्थानीय का उपयोग नहीं कर सकता"
Cannot use fixed local 'depthPtr' inside an anonymous method, lambda expression, or query expression
depthPtr
एक सरणी में एक fixed float*
कि System.Threading
से एक Parallel.For
लैम्ब्डा अभिव्यक्ति के अंदर इस्तेमाल किया जाता है,। जैसा कि मैंने कहा, यह संकलित और VS2008 पर ठीक है, लेकिन यह .NET 3.5 को लक्षित करते समय भी VS2010 पर नहीं है।
क्या यह .NET 4.0 में बदल गया है, और फिर भी, क्या यह अभी भी संकलित नहीं होना चाहिए जब मैं .NET 3.5 को लक्ष्य ढांचे के रूप में चुनता हूं? "निश्चित स्थानीय का उपयोग नहीं कर सकता" शब्द की खोज Google और Bing दोनों में बिल्कुल एक (बेकार) परिणाम उत्पन्न करती है।
यदि यह बदल गया है, तो इसका कारण क्या है? मैं कल्पना कर सकता हूं कि fixed
पॉइंटर-प्रकार को बंद करने में कैप्चरिंग थोड़ा अजीब हो सकता है, यही कारण है कि? तो मुझे लगता है कि यह बुरा अभ्यास है? और इससे पहले कि कोई पूछता है: नहीं, पॉइंटर्स का उपयोग यहां बिल्कुल महत्वपूर्ण नहीं है। मैं अभी भी जानना चाहते हैं, हालांकि :)
संपादित करें: अनुरोध किया के रूप में, एक कोड नमूना (स्पष्ट रूप से मेरा कार्यक्रम से नहीं,) जो त्रुटि reproduces: (VS2008 में
static unsafe void Main(string[] args)
{
float[] array = new float[10];
fixed (float* ptr = array)
{
Parallel.For(0, 10, i =>
{
ptr[i] = i;
});
}
}
ऊपर compiles अच्छी तरह से, Parallel
के संदर्भ से अलग, लेकिन कोई अन्य लैम्ब्डा अभिव्यक्ति करेगा), लेकिन वीएस -2010 में नहीं है।
क्या आप कोड को पोस्ट कर सकते हैं जो त्रुटि का कारण बनता है। – luke
ठीक है, पोस्ट करने के लिए बहुत कुछ नहीं है, यह वास्तव में त्रुटि क्या है: एक lamdba अभिव्यक्ति के अंदर एक सूचक का उपयोग। – JulianR
फिर भी, कोड का एक छोटा लेकिन पूरा टुकड़ा पोस्ट करना जिसे हम प्रयोग कर सकते हैं वह एक अच्छी चीज (टीएम) होगी। –