2009-07-16 12 views
29

मैं एक प्रतिनिधि को परिभाषित करना चाहता हूं जो कुछ तिथियां लेता है, अन्य पैरामीटर की अज्ञात संख्या (पैराम कीवर्ड का उपयोग करके), और यह वस्तुओं की एक सूची देता है;क्या आप एक प्रतिनिधि में पैराम कीवर्ड का उपयोग कर सकते हैं?

Func<DateTime, DateTime, params int[], List<object>> 

विजुअल स्टूडियो को वाक्यविन्यास पसंद नहीं है जो मुझे लगता है कि इसकी अनुमति नहीं है। क्या कोई मुझे बता सकता है क्यों?

उत्तर

21

आप कस्टम नहीं हो सकता है एक सामान्य प्रकार तर्क पर जिम्मेदार बताते हैं (CLI यह अनुमति नहीं देता है) , और सी # कंपाइलर प्रासंगिक विधि पैरामीटर पर System.ParamArrayAttribute उत्सर्जित करके params कीवर्ड लागू करता है।

यह आपको सिस्टम के साथ इसका उपयोग करने से रोकता है। Func <...> जेनेरिक प्रतिनिधि, लेकिन आप हमेशा अपना खुद का प्रतिनिधि प्रकार बना सकते हैं जो params का उपयोग करता है।

42

आप पिछले एक के अलावा किसी भी पैरामीटर के लिए पैराम का उपयोग नहीं कर सकते ... यह उस बारे में शिकायत कर रहा है जिसके बारे में शिकायत है।

आप एक प्रकार के तर्क में params का भी उपयोग नहीं कर सकते हैं। यह सिर्फ प्रतिनिधियों के लिए नहीं बल्कि सामान्य रूप से है। उदाहरण के लिए, आप नहीं लिख सकते हैं:

List<params string[]> list = new List<params string[]>(); 

हालांकि, आप एक नई प्रतिनिधि प्रकार, घोषणा कर सकते हैं इस तरह:

विधि समूह रूपांतरण एक मैच के लिए होगा
delegate void Foo(int x, params string[] y); 

... 

Foo foo = SomeMethod(); 
foo(10, "Hi", "There"); 

ध्यान दें कि विधि जो एक स्ट्रिंग सरणी लेती है - आप कुछ विधि को घोषित नहीं कर सकते:

void SomeMethod(int x, string a, string b) 

और ऊपर की ओर काम करने की अपेक्षा करें, उदाहरण के लिए। यह होना चाहिए था:

void SomeMethod(int x, string[] args) 

(। या यह params ही इस्तेमाल कर सकते हैं निश्चित रूप से,)

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