日期:2014-05-18  浏览次数:20421 次

问个引用类型的问题。
C# code

    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
            Get(list, 1);            
            Console.ReadLine();
        }
        static void Get(List<Person> list, int i)
        {
            if (i == 3)
                return;
            if (list == null)
                list = new List<Person>();
            Person p = new Person();
            p.ID = i;
            list.Add(p);            
            Get(p.list, ++i);
        }
    }
    class Person
    {
        public int ID { get; set; }
        public List<Person> list { get; set; }
    }


list.Add(p);这句把p添加到集合中,然后在把p.list继续添加,可是为什么添加不到集合中去呢?
而如果先实例化在传进去就可以,为什么呢?
 p.ID = i;
 list.Add(p);  
p.list = new List<Person>(); 


------解决方案--------------------
看错了。

你应该传Person对象。

引用类型(除了string)加不加ref out没差别吧
当然有差别,前者传值(引用),后者传引用(引用的引用)
------解决方案--------------------
如果不加ref,要这样写:
C# code
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
            Get(list, 1);            
            Console.ReadLine();
        }
        static void Get(List<Person> list, int i)
        {
            if (i == 3)
                return;
            Person p = new Person();
            p.ID = i;
            list.Add(p);   
            p.list= new List<Person>();
            Get(p.list, ++i);
        }
    }
    class Person
    {
        public int ID { get; set; }
        public List<Person> list { get; set; }
    }