क्या जावा के वैरग मापदंडों का कोई C # विकल्प है?


93

मैंने जावा और नई। नेट तकनीक पर काम किया है

क्या C # में एक फ़ंक्शन घोषित करना संभव है जो चर इनपुट मापदंडों को स्वीकार करता है

क्या निम्न जावा सिंटैक्स के समान कोई C # सिंटैक्स है?

void f1(String... a)

2
यदि नीचे दिए गए किसी भी उत्तर ने आपके प्रश्न का उत्तर दिया , तो स्टैक ओवरफ्लो जिस तरह से काम करता है, आप उसके आगे दिए गए चेकमार्क पर क्लिक करके उत्तर को "स्वीकार" करेंगे; यहाँ विवरण ।
— टीजे क्राउडर

जवाबों:


150

हां, C # में वैरैगस पैरामीटर्स के बराबर है। उन्हें पैरामीटर सरणियाँ कहा जाता है , और paramsसंशोधक के साथ पेश किया जाता है :

public void Foo(int x, params string[] values)

फिर इसके साथ कॉल करें:

Foo(10, "hello", "there");

जावा के साथ के रूप में, यह केवल अंतिम पैरामीटर है जो इस तरह भिन्न हो सकता है। ध्यान दें कि (जावा के साथ) एक पैरामीटर params object[] objectsआसानी से भ्रम पैदा कर सकता है, क्योंकि आपको यह याद रखने की आवश्यकता है कि प्रकार object[]का एक भी तर्क फिर से लपेटने के लिए है या नहीं। इसी तरह किसी भी अशक्त प्रकार के लिए, आपको यह याद रखने की आवश्यकता है कि क्या किसी एकल तर्क nullको एक सरणी संदर्भ या एकल सरणी तत्व माना जाएगा। (मुझे लगता है कि कंपाइलर केवल सरणी बनाता है अगर यह करना है, लेकिन मैं कोड लिखना चाहता हूं जो मुझे याद रखने से बचता है।)


+1, हालांकि मैं यह उल्लेख करूंगा कि (जैसा कि किसी अन्य भाषा सुविधा के साथ), यह दुरुपयोग नहीं होना चाहिए।
— फेडेरिको बारासटुई

16
@HighCore: यदि आप इसे किसी अन्य भाषा सुविधा के बारे में बताने जा रहे हैं, तो यह शायद ध्यान देने योग्य नहीं है :)
— जॉन स्कीट

2
@hvd: यह देखते हुए कि ओपी एक शुरुआत वाला प्रतीत होता है, मैं यहाँ नामित तर्कों, वैकल्पिक मापदंडों आदि में नहीं जाना चाहता। मैं उस बिंदु को देखता हूं जिसे आप बनाने की कोशिश कर रहे हैं, लेकिन मुझे लगता है कि यह इस समय प्रकाश की तुलना में अधिक भ्रम को जोड़ देगा।
— जॉन स्कीट

37

परम्स पर एक नज़र डालें (C # संदर्भ)

Params कीवर्ड आपको एक विधि पैरामीटर निर्दिष्ट करने देता है जो एक चर संख्या तर्क लेता है।

आप पैरामीटर घोषणा में निर्दिष्ट प्रकार के तर्कों, या निर्दिष्ट प्रकार के तर्कों की एक अल्पविराम से अलग सूची भेज सकते हैं। आप कोई तर्क भी भेज सकते हैं।

एक विधि घोषणा में परमस कीवर्ड के बाद किसी अतिरिक्त पैरामीटर की अनुमति नहीं है, और एक विधि घोषणा में केवल एक ही परम खोजशब्द की अनुमति है।

जैसा कि उदाहरण में दिखाया गया है कि विधि के रूप में घोषित किया गया है

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

और के रूप में इस्तेमाल किया

UseParams(1, 2, 3, 4);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.