關於C#的Main(String[] args)參數輸入問題

來源:互聯網
上載者:User

標籤:blog   http   使用   os   strong   檔案   問題   ar   

 

指定相關的測試代碼

 

    首先,寫一個用於測試的關於Main(String[] args)參數輸入有關的代碼類,如下:

 

using System;

 

public class Hello
{
    public static void Main(String[] args)
    {
        switch (args[0])
        {
            case "老闆":
                Console.WriteLine("早上好!我們隨時準備為您效勞!");
                break;
            case "僱員":
                Console.WriteLine("早上好!你可以開始工作了!");
                break;
            default:
                Console.WriteLine("早上好!祝你好運!");

 

                break;
        }
        Console.WriteLine("args[1]的值為:"+args[1]);
    }
}

 

 

 

測試回合

 

    現在,如果直接運行,得到的結果將是一個 "索引超出了數組界限"的錯誤。為什麼呢?因為這個時候String[] args並無任何內容,也就是說是一個空的數組,那麼你引用args[0]當然會導致一個越界的錯誤。

 

 

 

 

 

 

圖:直接運行導致的錯誤

 

如何在將args[0]的參數傳入

 

    現在,怎麼樣來將參數傳入,達到我們的目的呢?可以有2種方法:

 

1. 在運行之前將我們的參數設定,以便傳入。在"解決方案"視窗中,右鍵你的項目名,選擇 "屬性",在彈出的新視窗中選擇 "調試" ->"啟動選項"->"命令列參數" 中,輸入你要傳入的string參數值。(多個參數之間用空格隔開)

 

2. 將我們寫好的測試代碼儲存,例如:Program.cs。 然後在SDK中編譯(csc Program.cs) 注意路徑。得到一個Program.exe的檔案(同目錄下),然後我們可以在SDK傳入args參數了,方法是:在SDK中輸入我們編譯好的檔案並連參數一起傳入:Program.exe 老闆 早上好 。得到的資訊是:

 

早上好!我們隨時準備為您效勞!
args[1]的值為:早上好

 

    注意

 

1. 如果傳入多個參數,一定要用空格隔開,不能使用逗號。格式是:Program.exe 參數1 參數2 ...。
2. 參數的個數要與你代碼中出現的參數個數保持一致,否則會出現"索引超出數組界限"的異常。

 

 

 

 

 

 

圖:先編譯,然後將參數傳入

 

至此就已經成功了!!!

 

   問題:怎樣在程式中設定args[]的值呢?args[]不能直接用args[0]="hello"的形式訪問,也不能用args[0]=new String()的方式構造,那就只有使用傳遞了!

 

    下面的程式可以直接運行能夠成功,但如果去除捕捉異常的try塊,還是會出現越界問題。仔細思考try塊的作用可以讓你對main參數傳遞有更深入的瞭解。

 

using System;

 

public class Hello
{
    static int i = 0;
    static void print()
    {
        i++;
        if (i == 1)
        {
            string[] S ={ "老闆" };
            Main(S);
        }
        else
        {
            return;
        }
    }
    static void Main(string[] args)
    {
        print();
        try
        {
            switch (args[0])
            {
                case "老闆":
                    Console.WriteLine("早上好!我們隨時準備為您效勞!");
                    break;

 

                case "僱員":
                    Console.WriteLine("早上好!你可以開始工作了!");
                    break;
                default:
                    Console.WriteLine("早上好!祝你好運!");
                    break;
            }
        }
        catch
        {
            Console.WriteLine("運行完畢,finish");
            Console.ReadKey();
        }
    }
}

 

    分析此程式

 

    首先假設把捕捉異常try塊去除. 在沒有try塊的情況下,執行順序從Main()入口,調用print(),在print()中聲明S(S是一個局部變數,僅在print中有效),然後調用Main(S),傳入S執行Switch,對於args[0],列印出"早上好!我們隨時準備為您效勞!",print()調用完成(此時S生命週期結束). 返回到Main()繼續執行,到switch時,由於string屬於傳遞引用,而此時S已經消亡,arg[0]為空白,出現"索引超出了數組界限"異常的報錯.

 


    從上可以看出,實際上switch塊要執行兩次,前一次在一個函數調用內執行,傳入args[0]的值,而第二次由於S的消亡,導致args[0]為空白.出現"索引超出了數組界限"異常. 那麼,加上捕捉異常try塊的原因就很明顯了, 那就是阻止switch塊的第二次運行直接進入catch, 防止args[0]在沒有值的情況下被使用.

 

    此程式可以被擴充,注意關鍵字static起到的作用。反覆演練此程式,不斷去破壞和加固它,會感覺受益良多。

 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.