public void GetLstFeatCls(ILayer pLayer, ref List<IFeatureClass> _lstFeatCls)
        {
            try
            {
                ILayer pLyr = null;
                ICompositeLayer pComLyr = pLayer as ICompositeLayer;
                if (pComLyr == null)
                {
                    IFeatureLayer pFeatLyr = pLayer as IFeatureLayer;
                    if (!_lstFeatCls.Contains(pFeatLyr.FeatureClass))
                    {
                        _lstFeatCls.Add(pFeatLyr.FeatureClass);
                    }
                }
                else
                {
                    for (int i = 0; i < pComLyr.Count; i++)
                    {
                        pLyr = pComLyr.get_Layer(i);
                        GetLstFeatCls(pLyr, ref _lstFeatCls);
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }

解决方案 »

  1.   

    递归参数必须与函数参数一样,这很基础,至于REF可查看文档.
      

  2.   

    那是因为写这代码的用的教材是net刚出生时的教材现在的教材会告诉你此处可以不用ref,因为他是引用类型。
      

  3.   

    对于你示例的代码,要与不要都可以,因为 _lstFeatCls 是对象,且你仅改变了其内部数据
    但如果你对 _lstFeatCls 赋值的话,就一定要有的
      

  4.   

    如果是改动_lstFeatCls的属性,那么没有ref也可以
    如果是_lstFeatCls的整个赋值操作,那么就需要ref
      

  5.   

    前面虽然说了ref 可要可不要, 但如加了ref可以让读代码从方法签名中了解最终输出参数是哪个。方便代码的阅读
      

  6.   

    问题和递归没关系,参数用不用ref还是有细微区别的
        class Program
        {
            static List<int> list = new List<int> { 1, 2, 3 };        static void Main(string[] args)
            {
                Write(list); // 1 2 3            Change(ref list); 
                DontChange(list);            Write(list); // 11 22 33            Console.Read();
            }        static void Write(List<int> list)
            {
                list.ForEach(p => Console.Write(p + " "));
                Console.WriteLine();
            }        static void Change(ref List<int> list)
            {
                list = new List<int> { 11, 22, 33 };
            }        static void DontChange(List<int> list)
            {
                list = new List<int> { 111, 222, 333 };
            }
        }
      

  7.   

    和C++指针类型,引用的意思。可以用out。
      

  8.   

    ref 可以理解引用 的引用 也就是C++指针的指针 如果类型是结构类型 那么ref 是必须加的  通常都是类类型 已经具备引用类的方法 所以ref 可省略