示例:递归返回集合的几种方式

用途:整理递归返回集合的几种写法


1、利用添加返回集合递归

	/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
        public static List<string> GetAllFile(this DirectoryInfo dir, Predicate<FileInfo> match = null)
        {
            List<string> ss = new List<string>();

            foreach (var d in dir.GetFileSystemInfos())
            {
                if (d is DirectoryInfo)
                {
                    DirectoryInfo dd = d as DirectoryInfo;
                    ss.AddRange(dd.GetAllFile(match));
                }
                else if (d is FileInfo)
                {
                    FileInfo dd = d as FileInfo;

                    if (match == null || match(dd))
                    {

                        ss.Add(d.FullName);
                    }
                }
            }

            return ss;
        }


2、利用委托递归

 	/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
        public static List<string> GetAllFiledthis DirectoryInfo dir, Predicate<FileInfo> match = null)
        {
            List<string> ss = new List<string>();

            Action<DirectoryInfo> act = null;

            act = l =>
                 {
                     foreach (var d in l.GetFileSystemInfos())
                     {
                         if (d is DirectoryInfo)
                         {
                             DirectoryInfo dd = d as DirectoryInfo;

                             // HTodo  :递归处 
                             act(dd);
                         }
                         else if (d is FileInfo)
                         {
                             FileInfo dd = d as FileInfo;

                             if (match == null || match(dd))
                             {

                                 ss.Add(d.FullName);
                             }
                         }
                     }
                 };

            act(dir);

            return ss;
        }

3、利用迭代器递归

	/// <summary> 获取当前文件夹下所有匹配的文件 </summary>
        public static IEnumerable<string> GetAllFile1(this DirectoryInfo dir, Predicate<FileInfo> match = null)
        {
            foreach (var d in dir.GetFileSystemInfos())
            {
                if (d is DirectoryInfo)
                {
                    DirectoryInfo dd = d as DirectoryInfo;
                    dd.GetAllFile11(match);
                }
                else if (d is FileInfo)
                {
                    FileInfo dd = d as FileInfo;

                    if (match == null || match(dd))
                    {
                        yield return d .FullName;
                    }
                }
            }
            
        }




猜你喜欢

转载自blog.csdn.net/u010975589/article/details/64918762