2013-07-29 6 views
6

में काम करता है क्यों "my,string".Split(',') .NET C# में काम करता है?क्यों "मेरा, स्ट्रिंग" .प्लिट (',') .NET C#

एमएसडीएन के अनुसार स्प्लिट की घोषणा Split(Char[]) है। MSDN String.Split Method

मैं माना जाता है कि सी # 5 char[] {','} के लिए एकल चार ',' धर्मान्तरित; लेकिन मैं क्योंकि निम्नलिखित कोड काम नहीं करता गलत होना चाहिए:

static void Main() 
{ 
    GetChar(','); 
} 

static char GetChar(char[] input) 
{ 
    return input[0]; 
} 

संपादित करें: जॉन स्कीट के जवाब के लिए धन्यवाद मैं params char[] को तर्क बदल गया और यह अवधारणा साबित काम करता है।

static char GetChar(params char[] input) 
{ 
    return input[0]; 
} 
+6

'स्प्लिट' विधि के प्रोटोटाइप पर 'पैराम्स' कीवर्ड पर ध्यान दें, जो इंगित करता है कि विधि 'char' पैरामीटर की एक चर संख्या ले सकती है जिसे एक एकल सरणी में जोड़ा जाएगा। – RogerN

+1

सी # में, जब आप एक वर्ण के चारों ओर एकल उद्धरण का उपयोग करते हैं तो उसे चार के रूप में व्याख्या किया जाता है (char [] नहीं)। डबल उद्धरण एक स्ट्रिंग को दर्शाता है। – HitLikeAHammer

उत्तर

21

overload you're using एक parameter array का उपयोग करता है, मूल रूप से। params भाग यही है। कंपाइलर स्वचालित रूप से एक सरणी में आपके एकल तर्क को लपेटता है। तो यह:,

var x = text.Split(new char[] { ',' }); 

आप अपनी खुद की विधियों के लिए एक पैरामीटर सरणी भी उपयोग कर सकते हैं params कीवर्ड के साथ:

var x = text.Split(','); 

के बराबर है

static char GetChar(params char[] input) 
{ 
    return input[0]; 
} 

ध्यान दें कि पैरामीटर सरणी अंतिम पैरामीटर होना चाहिए। यही कारण है कि आप जिस अधिभार का उपयोग कर रहे हैं वह पैरामीटर सरणी का उपयोग करने के लिए केवलSplit का अधिभार है। अन्य भार के को देखो:

Split(Char[], Int32) 
Split(Char[], StringSplitOptions) 
Split(String[], StringSplitOptions) 
Split(Char[], Int32, StringSplitOptions) 
Split(String[], Int32, StringSplitOptions) 

इन मामलों में से प्रत्येक में, सरणी पहले पैरामीटर है, तो आप अपने आप को एक सरणी का निर्माण करने के लिए है:

var x = text.Split(new char[] { ',' }, 10); // Call the (char[], int) overload 

या एक परोक्ष टाइप का उपयोग कर सरणी:

var x = text.Split(new[] { ',' }, 10); // Call the (char[], int) overload 
4

वास्तविक अधिभार जिसे कहा जा रहा है this one है। ध्यान दें कि पृष्ठ के शीर्ष पर शीर्षलेख भ्रामक है, यह वास्तव मेंके बजाय params char[] लेता है। यह आपको "my, string".Split(new char[] { ',', ' ' }) का उपयोग करने के उछाल से कूदने के बजाय अलग-अलग में "my, string".Split(',', ' ') के रूप में विभाजित करने की अनुमति देता है।