2012-08-03 13 views
14

है मैं इस कोड है:सी # की जांच अगर आप तर्क पारित कर दिया है या नहीं

public static void Main(string[] args) 
{   
    if (string.IsNullOrEmpty(args[0])) // Warning : Index was out of the bounds of the array 
    { 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 
    } 
    else 
    { 
     ComputeParam cpter = new ComputeParam(); 
     foreach (string s in args){...} 
    } 
} 

इसके अलावा if(args.Length==0) की कोशिश की, लेकिन यह अभी भी काम नहीं करता।

असल में मैं यह जानना चाहता हूं कि उपयोगकर्ता ने तर्क के साथ प्रोग्राम को बुलाया है या नहीं। यदि कार्यक्रम इनपुट के लिए नहीं पूछेगा।

मैं यह कैसे कर सकता हूं? अग्रिम धन्यवाद।

+3

जब आप 'args.Length == 0'' का प्रयास करते हैं तो क्या होता है? –

+2

'args.Length == 0' के साथ क्या काम नहीं किया? भविष्य के लिए एक विनम्र युक्ति: जब आप कहते हैं "यह काम नहीं करता है", यह लगभग एक मुद्दा-स्पष्टीकरण के लिए पर्याप्त नहीं है। विस्तृत करें, कहें कि क्या काम नहीं करता है, यह कैसे काम नहीं करता है, इसके बजाय आप क्या अपेक्षा करते हैं, इत्यादि =) –

+0

जब आप 'if (args.Length == 0) 'का उपयोग करते हैं, और यह' टी काम, काम करने के बजाय यह क्या करता है? – phoog

उत्तर

28

if(args.Length==0) काम करना चाहिए, args[0] को क्रैश न होने के लिए कम से कम एक तर्क की आवश्यकता है।

8
if(args == null || args.Length == 0) 
{ 
    // no arguments 
} 
else 
{ 
    // arguments 
} 
4

यह एक सरणी है और दो परिदृश्य हैं जिनके अर्थ का कोई अर्थ नहीं हो सकता है। अपने अर्थ विज्ञान

args == null या args.Length == 0

इस मामले में जहां विधि जब कार्यक्रम क्रियान्वित किया जाता है (एक इकाई परीक्षण का कहना है के भाग के रूप विधि बुला नहीं जैसे) आर्ग तर्क अशक्त कभी नहीं होगा कहा जाता है पर निर्भर करता है (पहला परीक्षण अनावश्यक बनाने के लिए) मैंने इसे पूर्णता के लिए शामिल किया है क्योंकि मुख्य स्थिति

की तुलना में अन्य स्थितियों में एक ही स्थिति का आसानी से सामना किया जा सकता है यदि आप उन्हें उस क्रम में परीक्षण करते हैं तो आपको तर्कों के बारे में चिंता करने की आवश्यकता नहीं है उत्तरार्द्ध अभिव्यक्ति

if(args == null || args.Length == 0){ 
    ComputeNoParam cptern = new ComputeNoParam(); 
    cptern.ComputeWithoutParameters(); 
} 
else 
{ 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 
+0

में कोई समस्या थी कृपया "लम्बाई" का उपयोग करें .. पूंजी पत्र के बारे में सावधान रहें, न कि "लम्बाई" – levteck

4

यह भी काम करना चाहिए:

if (args.Length < 1) 
{ 
    //no args passed 
} 
-1

एक और विकल्प उपलब्ध है, तो आप पहले से ही Any() विस्तार का उपयोग करने के System.Linq का उपयोग कर रहे है, उदाहरण के लिए:

public static void Main(string[] args) 
{ 
    if (args == null && !args.Any()) 
    { 
     // No parameters passed. 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 

     return; 
    } 

    // process parameters 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 

यह भी लिखा जा सकता है:

public static void Main(string[] args) 
{ 
    if (!args?.Any() ?? true) 
    { 
     // No parameters passed. 
     ComputeNoParam cptern = new ComputeNoParam(); 
     cptern.ComputeWithoutParameters(); 

     return; 
    } 

    // process parameters 
    ComputeParam cpter = new ComputeParam(); 
    foreach (string s in args){...} 
} 

यह सिर्फ आपके लिए एक और विकल्प दिखाता है, मैं जाने के साथ सहमत हूं जी .Length के साथ, हालांकि मैं शून्य जांच छोड़ दूंगा और इसके बजाय सशर्त एक्सेस का उपयोग करूंगा।

if (args?.Length == 0) { 
    // Code hit if args is null or zero 
} 
संबंधित मुद्दे