2012-08-03 17 views
14

tôi có mã này:C# kiểm tra nếu bạn đã trôi qua đối số hay không

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){...} 
    } 
} 

Cũng cố gắng if(args.Length==0), nhưng nó vẫn không hoạt động.

Về cơ bản, tôi muốn tìm hiểu xem người dùng có gọi chương trình có đối số hay không. Nếu không chương trình sẽ yêu cầu đầu vào.

Tôi làm cách nào để thực hiện việc này? Cảm ơn trước.

+3

Điều gì sẽ xảy ra khi bạn thử 'args.Length == 0'? –

+2

Điều gì không hoạt động với 'args.Length == 0'? Một mẹo nhỏ cho tương lai: Khi bạn nói "nó không hoạt động", điều đó không đủ gần như giải thích vấn đề. Xây dựng, nói những gì không hoạt động, cách nó không hoạt động, những gì xảy ra thay vì bạn không mong đợi, vv =) –

+0

Khi bạn sử dụng 'if (args.Length == 0)', và nó doesn ' t làm việc, nó làm gì thay vì làm việc? – phoog

Trả lời

28

if(args.Length==0) sẽ hoạt động, args[0] yêu cầu ít nhất một đối số không bị lỗi.

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

là một mảng và có hai trường hợp có thể có nghĩa là KHÔNG đối số nào được chuyển. Tùy thuộc vào ngữ nghĩa của bạn

args == null hoặc args.Length == 0

Trong trường hợp này, nơi phương pháp này được gọi khi chương trình được thực hiện (ví dụ không gọi phương thức như một phần của nói một thử nghiệm đơn vị) đối số args sẽ không bao giờ được null (làm cho thử nghiệm đầu tiên thừa) Tôi đã bao gồm nó cho đầy đủ vì cùng một tình huống có thể dễ dàng gặp phải trong các phương thức khác so với chính

nếu bạn kiểm tra chúng theo thứ tự đó, bạn không phải lo lắng về args là null trong biểu thức sau

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

Vui lòng sử dụng ".Length" .. cẩn thận về chữ cái viết hoa chứ không phải ".length" – levteck

4

này cũng nên làm việc:

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

Một tùy chọn khác có sẵn nếu bạn đã sử dụng System.Linq là để tận dụng các phần mở rộng Any(), ví dụ:

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){...} 
} 

này cũng có thể được viết như sau:

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){...} 
} 

Điều này chỉ hiển thị tùy chọn khác có sẵn cho bạn, tôi đồng ý với goin g với .Length, mặc dù tôi sẽ thả kiểm tra null và sử dụng quyền truy cập có điều kiện thay thế, vì vậy.

if (args?.Length == 0) { 
    // Code hit if args is null or zero 
} 
Các vấn đề liên quan