a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁(yè) > 編程 > C# > 正文

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

2020-01-24 02:53:57
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

指定相關(guān)的測(cè)試代碼

首先,寫(xiě)一個(gè)用于測(cè)試的關(guān)于Main(String[] args)參數(shù)輸入有關(guān)的代碼類(lèi),如下:

復(fù)制代碼 代碼如下:

using System;

public class Hello
{
    public static void Main(String[] args)
    {
        switch (args[0])
        {
            case "老板":
                Console.WriteLine("早上好!我們隨時(shí)準(zhǔn)備為您效勞!");
                break;
            case "雇員":
                Console.WriteLine("早上好!你可以開(kāi)始工作了!");
                break;
            default:
                Console.WriteLine("早上好!祝你好運(yùn)!");

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


測(cè)試運(yùn)行
現(xiàn)在,如果直接運(yùn)行,得到的結(jié)果將是一個(gè) "索引超出了數(shù)組界限"的錯(cuò)誤。為什么呢?因?yàn)檫@個(gè)時(shí)候String[] args并無(wú)任何內(nèi)容,也就是說(shuō)是一個(gè)空的數(shù)組,那么你引用args[0]當(dāng)然會(huì)導(dǎo)致一個(gè)越界的錯(cuò)誤。

圖:直接運(yùn)行導(dǎo)致的錯(cuò)誤

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

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

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

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

早上好!我們隨時(shí)準(zhǔn)備為您效勞!
args[1]的值為:早上好

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

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

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

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

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

復(fù)制代碼 代碼如下:

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("早上好!我們隨時(shí)準(zhǔn)備為您效勞!");
                    break;

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


分析此程序

首先假設(shè)把捕捉異常try塊去除. 在沒(méi)有try塊的情況下,執(zhí)行順序從Main()入口,調(diào)用print(),在print()中聲明S(S是一個(gè)局部變量,僅在print中有效),然后調(diào)用Main(S),傳入S執(zhí)行Switch,對(duì)于args[0],打印出"早上好!我們隨時(shí)準(zhǔn)備為您效勞!",print()調(diào)用完成(此時(shí)S生命周期結(jié)束). 返回到Main()繼續(xù)執(zhí)行,到switch時(shí),由于string屬于傳遞引用,而此時(shí)S已經(jīng)消亡,arg[0]為空,出現(xiàn)"索引超出了數(shù)組界限"異常的報(bào)錯(cuò).

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

此程序可以被擴(kuò)展,注意關(guān)鍵字static起到的作用。反復(fù)演練此程序,不斷去破壞和加固它,會(huì)感覺(jué)受益良多。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久国产精品视频 | 在线成人免费视频 | 成人毛片在线视频 | 精品自拍视频 | 久久精品色欧美aⅴ一区二区 | av观看| 操操操av| 精品欧美一区二区在线观看 | 国产精品一区二区三区在线 | 国精产品一区一区三区在线观看 | 国产第六页| 伊人超碰 | 男女羞羞视频免费在线观看 | 欧美日韩综合一区 | 欧美日韩国产一区二区三区不卡 | 欧美日韩高清 | 日韩欧美综合在线 | 欧美日韩综合视频 | 污片在线免费看 | 精品久久久久一区二区三区 | 天天操操| 国产精品一区二区麻豆 | 色综合99| 夜夜高潮 | 欧美日韩系列 | 视频二区| 日韩在线免费电影 | 国产99久久久久久免费看农村 | 国产精品高清在线 | 91在线观看网站 | 色偷偷噜噜噜亚洲男人 | 日本黄a三级三级三级 | 国产欧美一区二区三区国产幕精品 | 日韩在线一区二区 | 国产黄色免费小视频 | 91精品国产乱码久久蜜臀 | 久久久久久久99精品免费观看 | 天堂一区二区三区 | 精品一区二区久久久久久久网站 | 国产精品久久久久久久裸模 | 在线碰 |