黑马程序员技术交流社区

标题: Console.WriteLine(); [打印本页]

作者: 杨曾荣    时间: 2012-3-11 12:05
标题: Console.WriteLine();
在学习结构的时候意外发现。
定义了一个Person结构,有name和age两个变量;本来想把name和age一起输出来,结果只有name被输出,仔细一看原来在Console.WriteLine();输出语句里一不小心用逗号把它们两个隔开了。
namespace 结构
{
    class Program
    {
        public struct Person{
            public string name;
            public int age;
        }
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.age = 21;
            p1.name = "杨曾荣";
            Console.WriteLine(p1.name, p1.age);
            Console.ReadKey();
        }
    }
}
当我把后面的那个p1.age去掉的时候,逗号后面提示说缺少参数,既然是参数,为什么输出来的只有pl.name,而pl.age给省略了呢?
Console.WriteLine(p1.name, p1.age);这句代码写成这样,可能是java思维性的习惯吧,所以在想把它们输出来的时候中间就直接敲了逗号,这里为什么不能像java那样把两个值都一起输出来,鄙人愚钝,解释一下吧。
作者: 陈东    时间: 2012-3-11 12:42
当你用Console.WriteLine(p1.name, p1.age)的时候其实是编译器是选择的同名方法WriteLine(String, Object)或者WriteLine(String, Object())这两个具有两个参数的Console.WriteLine方法,你去掉p1.age之后逗号还在,编译器就认为你选择的是具有两个参数的方法,所以会提示你缺少参数!而且第二个参数的数据类型也不是你要输出的int型,所以当你写了p1.age 的时候也不会给你输出。表达能力有限,不知道你看懂我在说什么没有,嘿嘿
作者: 邓坤    时间: 2012-3-11 12:45
console.writeline("姓名={0},年龄={1}",p1.name,p1.age);
你试一吧
作者: 柏云杉    时间: 2012-3-11 12:45
正确的写法是:
Console.WriteLine(“名字:{0},年龄:{1}”p1.name, p1.age);
你可要在这里设置断点,然后按F12查看,就会发现它调用的是Console类WriteLine()方法的带有2个参数的重载:



第一个参数是string类型,就是用来显示到屏幕上的内容。而第二个参数是object类型,这个参数并非用来显示的。而是将其代入到第一个参数中的占位符的。由正反大括号表示,中间的是占位符的索引。根据索引一次调用后面的参数。也就是说第一个参数中的占位符将由第二个参数来代替。
根据你的代码程序自动调用了Console.WriteLine(string format, object arg0)的方法,将你传入的第二个参数p1.age代替掉第一个参数p1.name中的占位符,然而你的第一个参数p1.name中并未有占位符存在。那么第二个参数p1.age就无法显示。就好比你定义了一个变量而没有使用它这个意思。 希望能帮到你。
作者: 贾宁    时间: 2012-3-11 12:48
Console.WriteLine()中友多个参数时,输出的都是第一个参数中的内容,从第二个参数往后的内容能不能输出,要看第一个参数中有没有占位符,后边的参数都是用来替换第一个参数中占位符的值,Console.WriteLine(“name={0},age={1}”,p1.name,p1.age),后边的参数用来替换占位符{0}  {1}
作者: 原世功    时间: 2012-3-11 14:33
你这里加了个逗号,c#会默认使用writeline的第十四个重载,如图所示,这样程序自然会报错,因为你缺少一个参数!

writeline重载.png (13.7 KB, 下载次数: 310)

writeline重载.png

作者: 王长森    时间: 2012-3-11 14:47
console.writeline("姓名:"+p1.name+"年龄:"+p1.age);
字符串连接也可以
也可以重写ToString()方法




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2