क्या मैं किया करते थे:एक ParamArray का उपयोग करना है, लेकिन आवश्यकता के कम से कम एक पैरामीटर
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channels As IEnumerable(Of ChannelType))
पहले एक बस {channel}
साथ दूसरा एक एक सरणी में अपनी पैरामीटर कन्वर्ट करने के लिए कहता है।
मैंने फैसला किया कि विधि को पारित करने के लिए चैनलों की एक सूची बनाने के लिए अजीब था और दो ओवरलोड को एक विधि में गठबंधन करना चुना गया जो ParamArray
लेता है।
Public Sub Subscribe(ParamArray channels() As ChannelType)
'Usage
Subscribe(ChannelType.News)
Subscribe(ChannelType.News, ChannelType.Sports)
Subscribe() 'Oops... this is valid
यहां "सर्वश्रेष्ठ अभ्यास" क्या है? मुझे लचीलापन पसंद है कि ParamArray
मुझे लोगों को सामान देने में बस देता है, लेकिन यह डेवलपर त्रुटि विफलता के माध्यम से डेवलपर "असफल-तेज़" में मदद करने में विफल रहता है ... इसका मतलब है कि ArgumentException
जैसे कुछ लोग यहां से सवाल से बाहर हैं इस विधि का उपभोग किसी यूनिट परीक्षण नहीं लिख रहा है। एक विकल्प इस प्रकार ...
Public Sub Subscribe(channel As ChannelType)
Public Sub Subscribe(channel As ChannelType, ParamArray channels() As ChannelType)
है लेकिन मुझे लगता है कि मुझे डालता है की तरह लगभग वापस एक वर्ग के लिए, भ्रामक है, और कहा कि विधि के अपने कार्यान्वयन की आवश्यकता कम सीधी-सपाट होने के लिए।
वह चालाक है! –
मुझे लगता है कि यह जवाब यह हो जाता है ... क्षमा करें @ मेटा-नाइट! मुझे यह पसंद है कि मैं कंपाइलर फीडबैक कैसे प्राप्त करता हूं और मुझे 'पैरामरे' के साथ एक ही आइटम को अपने तर्कों पर दोहराने के बजाय 'पैरामरे' पर फिर से शुरू करने में सक्षम होने के साथ उपयोग की सीधी-आगे आसानी मिलती है। –
@ जेफब्रिडमैन: ध्यान दें कि यह कोड, अलग तर्क के साथ दृष्टिकोण के विपरीत, कोड को किसी भी सरणी में पास करने के लिए संभव बनाता है जिसमें पहले आइटम और शेष सरणी को पास करने के बजाय सभी पैरामीटर शामिल होते हैं; नतीजतन, जबकि यह एक खाली तर्क सूची के साथ आमंत्रण को अस्वीकार कर सकता है, यह समय खाली संकलन के साथ आमंत्रण को अस्वीकार नहीं कर सकता है। – supercat