2012-09-18 136 views
0

我有一個工具,我想從我的命令提示符運行。C#中的命令行#

的代碼是作爲

static void Main(string[] args) 
    { 

     string User;    
     if (args[0].Length != 0) 
     { 
      User = args[0]; 
     } 
     else 
     { 
     Console.Write("Please Enter the Username"); 
     User = Console.ReadLine(); 
     } 

如果我沒有給用戶名或在命令提示我的「tool.exe」之後的第一個參數,它引發等「索引陣列的邊界之外的異常「

我想ouptut as,如果我沒有提供參數 - 它應該提示我給出用戶名。請幫助我。

回答

3

args是一個數組,你應該檢查長度。當你檢查args[0].Length時,你實際上已經假設陣列中至少有一個元素,因此你正在檢查第一項的Length

嘗試

if (args.Length != 0) 

來代替,該檢查的命令行參數的陣列的長度。

2

您不想撥打該項目Length

  \/ Change here 
    if (args.Length != 0) 
    { 
     User = args[0]; 
    } 
    else 
    { 
    Console.Write("Please Enter the Username"); 
    User = Console.ReadLine(); 
    } 
1

您需要更改的,如果到:

static void Main(string[] args) 
{ 

    string User;    
    if (args.Length != 0) // Change from args[0] to args 
    { 
     User = args[0]; 
    } 
    else 
    { 
    Console.Write("Please Enter the Username"); 
    User = Console.ReadLine(); 
    } 
} 

此調用後你一定要做一個 string.IsNullOrEmpty(User) beforen你使用它。

+0

爲什麼需要檢查空或空?考慮到'args.Length'只會計算爲大於0,如果它實際上不爲空且不爲空,那麼額外檢查的需求是什麼? –

+0

如果是的話,他會用Console.Readline();那就是我爲什麼這樣說。 –

+0

啊 - 在他的'Console.ReadLine()'之後。對。不完全清楚。 =) –

0

您必須檢查參數數組的長度,即參數的數量。目前您正在檢查args [0]的大小。

if (args.Length != 0) 
{ 
    // command have some params 
} 
else 
{ 
// command have no params 
} 
1

做到這一點

static void Main(string[] args) 
{ 

string User;    
if (args.Length > 0) 
{ 
    User = args[0]; 
} 
else 
{ 
Console.Write("Please Enter the Username"); 
User = Console.ReadLine(); 
} 
} 
0

只需更換以下行:

如果(參數[0]。長度!= 0)

用下面的代碼:

if(arg.Length !=0) <br> 

在你的代碼中,你在args數組中引用了第0項,然後檢查它的長度。
由於您要檢查數組長度,請使用數組本身的Length屬性t

0

通過這樣做,您正在查看集合字符串[]中的第一個元素。

if (args[0].Length != 0) 

如果沒有任何參數,這會發出異常。 如果您想檢查是否有任何參數,則正確的語句如下。

if (args.Length != 0) 
//Or this 
if (args.Any()) 

觀察到Any()是System.Linq命名空間的一部分。