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

关于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起到的作用。反复演练此程序,不断去破坏和加固它,会感觉受益良多。

时间: 2024-10-06 20:22:03

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

关于Console的Main(String[] args)参数输入

之前接触一个往Console里输入参数的项目,资深QA教我怎么run,灰常脸红. 今日无事,baidu之. Step1 写简单Console Code. 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 int i = 0; 6 if (args.Length < 1) 7 Console.WriteLine("No args"); 8 else 9 foreach (string s in args) 10

public static void main(String[] args){}函数诠释

主函数的一般写法如下: public static void main(String[] args){-} 下面分别解释这些关键字的作用: (1)public关键字,这个好理解,声明主函数为public就是告诉其他的类可以访问这个函数. (2)static关键字,告知编译器main函数是一个静态函数.也就是说main函数中的代码是存储在静态存储区的,即当定义了类以后这段代码就 已经存在了.如果main()方法没有使用static修饰符,那么编译不会出错,但是如果你试图执行该程序将会报错,提示ma

C#中static void Main(string[ ] args)中的作用及解释

C#中static void Main(string[ ] args)中的作用及解释 static 表示方法是静态的就是说方法在程序被编译的时候就被分配了内存,使用的时候不用生成某个类型的对象,知道程序退出才释放. void 表示方法没有返回值,就是方法没有renturn 关键字. main 是方法名,当然这个方法是特殊的方法,是Main()就是说是主函数,就是整个程序的入口,程序被编译后从这里开始执行,这也是main方法要是static的原因,因为在啥都没做的时候这个函数就得存在. strin

C#中static void Main(string[] args)的含义

C#中static void Main(string[] args)的含义 static:是将main方法声明为静态的. void:说明main方法不会返回任何内容. String[]args:这是用来接收命令行传入的参数,String[]是声明args是可以存储字符串数组. 运行时会弹出命令窗口,你可以在那里输入一些参数,string[] args 指的就是你在命令窗口输入的参数. 也就是命令行参数. args是用来处理命令行参数的.命令行参数,就是你运行这个程序的时候给它传的参数.它是可选项

第三次博客作业package com.fry; //导入java.util.Arrays; import java.util.Arrays; public class Demo1 { public static void main(String[]args){ //创建对象,对象名为hello Demo1 hello =new Demo1(); //调用方法并将返回值保存在变量中

1.  某网站管理系统,用户注册时,电话号码为可选输入项,输入格式为:区号-电话号码—分机号,中间用“-”隔开.以下为jsp页面上的设计,且并未对输入做任何控制. 假设系统现在需要取出中间的电话号码部分,代码如下: /** * * 该方法根据用户输入取出中间的电话号码部分 * @param strPhoneNum 电话号码,如:“0591-83279988—002” * @return 返回号码部分,如:“83279988” */ public String getPhoneNumber(Str

《Java程序员面试笔试宝典》之为什么需要public static void main(String[] args)这个方法

public staticvoid main(String[] args)为Java程序的入口方法,JVM在运行程序的时候,会首先查找main方法.其中,public是权限修饰符,表明任何类或对象都可以访问这个方法,static表明main方法是一个静态方法,即方法中的代码是存储在静态存储区的,只要类被加载后,就可以使用该方法而不需要通过实例化对象来访问,可以直接通过类名.main()直接访问,JVM在启动的时候就是按照上述方法的签名(必须有public与static修饰,返回值为void,且方

将 main 方法定义为:public static void main(String[] args)的理由

1.没有public修饰符或者其他修饰符 错误: 在类...中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args) 否则 JavaFX 应用程序类必须扩展javafx.application.Application 2.没有static 错误: main 方法不是类 ... 中的static, 请将 main 方法定义为: public static void main(String[] args) 3.返回值不是v

关于public static void main(String[] args)相关知识

main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同.比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等. 这个main()方法的声明为:public static void main(String args[]).必须这么定义,这是Java的规范.为什么要这么定义,和JVM的运行有关系. 1)解释main:当一个类中有main()方

public static void main(String[] args)说明

/*public static void main(String[] args) 主函数特殊之处:1,格式是固定的.2,被jvm所识别和调用. public:因为权限必须是最大的.static:不需要对象的,直接用主函数所属类名调用即可.void:主函数没有具体的返回值.main:函数名,不是关键字,只是一个jvm识别的固定的名字.String[] args:这是主函数的参数列表,是一个数组类型的参数,而且元素都是字符串类型. */ class MainDemo { public static