A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 维纳斯之叶 中级黑马   /  2012-11-10 10:28  /  1992 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 维纳斯之叶 于 2012-11-17 08:21 编辑

            string str = "Chinese";
            char[] ch = str.ToCharArray();
            Array.Reverse(ch);
           Console.WriteLine(ch);//输出esenihC
为什么字符数组不需要经过遍历,直接就能输出内容?String或Int类型的数组经过翻转后必须经过遍历才能输出内容,直接输出却会出错??
int[] intStr = { 1, 2, 3, 4, 5, 6, 7 };
            Array.Reverse(intStr);
Console.WriteLine(intStr);//得到的是System.Int32[],为什么?
int[] intStr = { 1, 2, 3, 4, 5, 6, 7 };
            Array.Reverse(intStr);
for (int i = 0; i < intStr.Length; i++)
            {
                Console.WriteLine(intStr);
            }
为什么这样遍历以后才能正确输出翻转后的值??求解。。。。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

3 个回复

倒序浏览
必须遍历str才能输入翻转后的结果(int的同理),不知道为什么Console.WriteLine(str);得到的结果是System.String[],继续关注。。。


关于上面的问题,是因为 Console.WriteLine() 或者 Console.Write() 输出的是一个对象 的 ToString()结果
比如:
int i =10;
  Console.Write(i);  此时输出的是 i 变量的 ToString() 结果
同样,放在 数组对象 里,
  string[]  strs = {"hello","hi","world"};
Console.Write(strs); 此时输出的是 strs.ToString()结果,也就是 System.String[] ,因为strs是一个对象,不是数组的元素,所以并不会输出数组的元素  
要想输出数组元素,还是得遍历输出元素。这就是为什么 遍历的时候我们 Console.Write(strs[i]) 参数里得填strs[i] 的原因

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
这是因为Console中有WriteLine(char[])的方法,但是没有WriteLine(int[])、WriteLine(string[])方法,这时会调用WriteLine(object)方法,此方法会将object.ToString(),于是就产生了“System.Int32[]”和“System.String[]”的结果

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
同意楼上的意见

再补充一点: 其实 Console.WriteLinme(char[]) 经反编译得知 最后的关键代码如下
    for (int i = 0; i < count; i++)
    {
        this.Write(buffer[index + i]);
    }

其实 内部还是实现的循环,, 调用了 Console.Write() 方法 参数还是 数组的元素

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马