最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析C#中的Main(String[] args)參數(shù)輸入問題

 更新時間:2014年01月15日 10:17:35   作者:  
本篇文章主要是對C#中的Main(String[] args)參數(shù)輸入問題進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助

指定相關的測試代碼

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

復制代碼 代碼如下:

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]);
    }
}


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

圖:直接運行導致的錯誤

如何在將args[0]的參數(shù)傳入

現(xiàn)在,怎么樣來將參數(shù)傳入,達到我們的目的呢?可以有2種方法:

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

2. 將我們寫好的測試代碼保存,例如:Program.cs。 然后在SDK中編譯(csc Program.cs) 注意路徑。得到一個Program.exe的文件(同目錄下),然后我們可以在SDK傳入args參數(shù)了,方法是:在SDK中輸入我們編譯好的文件并連參數(shù)一起傳入:Program.exe 老板 早上好 。得到的信息是:

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

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

圖:先編譯,然后將參數(shù)傳入

至此就已經(jīng)成功了!??!

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

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

復制代碼 代碼如下:

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塊的情況下,執(zhí)行順序從Main()入口,調用print(),在print()中聲明S(S是一個局部變量,僅在print中有效),然后調用Main(S),傳入S執(zhí)行Switch,對于args[0],打印出"早上好!我們隨時準備為您效勞!",print()調用完成(此時S生命周期結束). 返回到Main()繼續(xù)執(zhí)行,到switch時,由于string屬于傳遞引用,而此時S已經(jīng)消亡,arg[0]為空,出現(xiàn)"索引超出了數(shù)組界限"異常的報錯.

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

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

相關文章

最新評論

台江县| 安顺市| 桐乡市| 富裕县| 通州市| 屯门区| 林芝县| 揭阳市| 武胜县| 米易县| 柳林县| 巴里| 咸阳市| 老河口市| 阿尔山市| 来宾市| 万安县| 东方市| 晋宁县| 图木舒克市| 即墨市| 安徽省| 永仁县| 清水县| 阿拉善左旗| 田阳县| 秀山| 安新县| 若羌县| 叙永县| 宁化县| 灵武市| 门源| 琼结县| 应城市| 巢湖市| 米易县| 新巴尔虎左旗| 南澳县| 临夏市| 治县。|