2009-09-21 13 views
11

क्या पैराम कीवर्ड वास्तव में विस्तार विधियों के भीतर समर्थित नहीं है?सी # पैराम और एक्सटेंशन विधियों का उपयोग कर

मुझे पता चला है कि जब मैं पैराम्स कीवर्ड के साथ विस्तार विधियां बनाता हूं, तो मुझे लगता है कि "एक्स के लिए कोई अधिभारित विधि 2 तर्क नहीं लेती"। Intellisense विस्तार विधि को पहचानता है और यहां तक ​​कि जानता है कि इसे किसी ऑब्जेक्ट सरणी की आवश्यकता है।

यहां कुछ नमूना कोड है:

public static DalRow EasyRetrieveSingle(this DalRow dalRow, object[] parameters) 
{ 
    Dictionary<string, object> dic = new Dictionary<string, object>(); 
    for (int i = 0; i < parameters.Length; i += 2) 
     dic.Add(parameters[i].ToString(), parameters[i + 1]); 

    List<DalRow> list = DalRow.RetrieveByFieldValues(dalRow.Structure, null, dic).Cast<DalRow>().ToList(); 
    if (list.Count == 0) return null; 
    return list[0]; 
} 

यहां कुछ नमूना कोड है कि यह (कोई लाभ नहीं हुआ) कॉल

(new X()).EasyRetrieveSingle(1, 2); 
+4

काम करता है। ऐसा लगता है कि आप अपने कोड स्निपेट में 'पैराम्स' खो रहे हैं? –

+0

वाह! यह ठंडा सिर ठंडा होना चाहिए। सवाल के लिए मेरी माफ़ी। – Daniel

+0

कोई चिंता नहीं। कृपया शीर्षक को न बदलें, जैसा कि आपको लगता है शर्मिंदा है, यह अन्य लोगों को एक ही समस्या को हल करने में मदद करेगा – johnc

उत्तर

23

है ऐसा लगता है कि आप params कीवर्ड भूल रहे हैं की तरह ...

public static DalRow EasyRetrieveSingle(this DalRow dalRow, params object[] parameters) 
8

आप अपनी विधि घोषणा में params कीवर्ड खो रहे हैं tion।

public static DalRow EasyRetrieveSingle(
    this DalRow dalRow, params object[] parameters) 
          ↑ 

यह संकलित करता है तथा पूरी तरह से चलाता है: मेरे लिए

static class Extensions 
{ 
    public static void Test(this Program program, params object[] args) { } 
} 

class Program 
{ 
    static void Main() 
    { 
     new Program().Test(1, 5); 
    } 
} 
संबंधित मुद्दे