2011-09-08 13 views
6

संभव डुप्लिकेट:
C# 3.0 generic type inference - passing a delegate as a function parameterइन प्रकार के तर्कों का अनुमान क्यों नहीं लगाया जा सकता है?

Main में कॉल में निम्नलिखित कोड नमूना के प्रकार के तर्क क्यों पता नहीं लगाया जा सकता है?

using System; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Method(Action); 
    } 

    static void Action(int arg) 
    { 
     // ... 
    } 

    static void Method<T>(Action<T> action) 
    { 
     // ... 
    } 
} 

यह निम्न त्रुटि संदेश देता है:

त्रुटि CS0411: विधि Program.Method<T>(System.Action<T>) के लिए प्रकार तर्क के उपयोग से नहीं लगाया जा सकता। प्रकार तर्कों को स्पष्ट रूप से निर्दिष्ट करने का प्रयास करें।

+0

आपको बहुत बहुत धन्यवाद। खोजा लेकिन मुझे यह नहीं मिला। –

+0

@Pieter: डारिन द्वारा उल्लिखित पोस्ट का जवाब है, और इसमें अधिक जानकारी के लिए कुछ अच्छे लिंक हैं। –

+0

10 पोस्ट या कुछ पढ़ें, लेकिन उपर्युक्त उनमें से नहीं था। –

उत्तर

0

बस यह एक कंपाइलर है जो मुझे लगता है कि आपका क्या मतलब है।

मुझे लगता है कि ऐसा इसलिए है क्योंकि Action विधि समूह के रूप में उपयोग किया जाता है, लेकिन यह Action<int> प्रकार का नहीं है।

आप इसे इस प्रकार के डाली यदि यह काम करता है:

Method((Action<int>)Action); 
+5

मुझे उम्मीद है कि यह int हो। और मुझे लगता है कि ओपी पहले ही जानता है कि संकलक उसे क्या कह रहा है। –

+0

हाँ जब तक मैं इसे एक कंपाइलर में नहीं डालता, मैंने समस्या का संदर्भ जारी नहीं किया। तुरंत स्पष्ट नहीं है कि कार्रवाई विधि को संदर्भित करती है। – TheCodeKing

0

यह काम करता है:

static void Main(string[] args) 
    { 
     Method<int>(Action); 
    } 

    static void Action(int arg) 
    { 
     // ... 
    } 

    static void Method<T>(Action<T> action) 
    { 
     // ... 
    } 
+1

हां, लेकिन यह नहीं पूछा जा रहा है कि यहां क्या पूछा जा रहा है। पूछा जाता है कि क्यों ओपी ** द्वारा दिखाया गया है ** काम नहीं करता है। –

2

समस्या यह है कि Action (एक तरफ पहले से ही एक प्रकार किया जा रहा से, इसका नाम बदलना कृपया) वास्तव में है एक विधि समूह जो प्रतिनिधि प्रकार Action<int> पर परिवर्तनीय है। टाइप-इनफरेंस इंजन इस प्रकार का अनुमान नहीं लगा सकता है क्योंकि विधि समूह अभिव्यक्ति टाइपलेस है। यदि आप वास्तव में विधि समूह को Action<int> पर डालते हैं, तो टाइप-अनुमान सक्षम होता है:

Method((Action<int>)Action); // Legal 
संबंधित मुद्दे

 संबंधित मुद्दे