日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

关于C#的Main(String[] args)参数输入问题

發布時間:2024/4/11 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于C#的Main(String[] args)参数输入问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

指定相關的測試代碼

??? 首先,寫一個用于測試的關于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起到的作用。反復演練此程序,不斷去破壞和加固它,會感覺受益良多。

______________________________________________________________________________________

以上是轉載,原文地址:http://hi.baidu.com/hunterzou/blog/item/7cced48b5461de1bc9fc7a3e.html

寫得很好很詳細啊^_^

轉載于:https://www.cnblogs.com/hachi/archive/2011/03/14/1984303.html

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的关于C#的Main(String[] args)参数输入问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。