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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓连超 中级黑马   /  2012-11-21 22:25  /  1434 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邓连超 于 2012-11-22 14:06 编辑

static void Main(string[] args)
        {

            string[] strs1 = { "a", "b", "c", "d", "e" };
            string[] strs2 = { "d", "e", "f", "g", "h" };

            ArrayList list1 = new ArrayList();
            ArrayList list2 = new ArrayList();

            list1.AddRange(strs1);
            list2.AddRange(strs2);

            for (int i = 0; i < list2.Count; i++)
            {
                if (!list1.Contains(list2))
                {
                    list1.Add(list2);
                }
                Console.WriteLine(list1);
            }

            Console.ReadKey();
        }



应该输出abcdefg的啊,怎么不对呢?

5 个回复

倒序浏览
list1.Add(list2[i]); //加的是对string[]的引用,而你list1 值new了一次,只有一个对象,而list1加了5次对同一个list1 的引用,
回复 使用道具 举报
补充下上楼,所以呢你可以这样解决:
  1.   static void Main(string[] args)
  2.         {

  3.             string[] strs1 = { "a", "b", "c", "d", "e" };
  4.             string[] strs2 = { "d", "e", "f", "g", "h" };

  5.             ArrayList list1 = new ArrayList();
  6.            // ArrayList list2 = new ArrayList();

  7.             list1.AddRange(strs1);
  8.             list1.AddRange(strs2);

  9.             for (int i = 0; i < list1.Count; i++)
  10.             {
  11.                 if (!list1.Contains(list1[i]))
  12.                 {
  13.                     list1.Add(list1[i]);
  14.                 }
  15.                 Console.WriteLine(list1[i]);
  16.             }

  17.             Console.ReadKey();
  18.         }
复制代码
回复 使用道具 举报
崔晓聪 发表于 2012-11-22 09:54
补充下上楼,所以呢你可以这样解决:

晓聪提供了去除list2,只用list1的方法。其实也可以保留list2.
你没有得到相应的结果,不是出在list1的赋值上,通过在list1.Add(list2);断点,你可以发现,
list1确实有8个值:abcdefgh.但为什么只输出abcde呢?
原因很简单,for循环里截至条件i<list2.Count,而list2.Count的值是5,
所以Console.WriteLine(list1);只能输出list1的前五项。
当然,你也不能直接把list1.count改成list2.count.应该在for循环外,再遍历输出list1.
  1. foreach (string item in list1)
  2.    {
  3.      Console.WriteLine(item);
  4.     }
复制代码
就可以得到相应结果

点评

牛B呀!!!  发表于 2012-11-22 13:44
回复 使用道具 举报
欧玉斌 发表于 2012-11-22 11:29
晓聪提供了去除list2,只用list1的方法。其实也可以保留list2.
你没有得到相应的结果,不是出在list1的赋 ...

哈哈,不错!!
回复 使用道具 举报
谢谢楼上各位热心解答~在这寒冷的冬季,心里流过一股暖流...(此处省略好多个字....)
继续努力去!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马