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

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

 

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;
        }/// <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;
        }	/// <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;

      var result = dd.GetAllFile11(match);

                    foreach (var item in result)
                    {
                        yield return item;
                    }
                }
                else if (d is FileInfo)
                {
                    FileInfo dd = d as FileInfo;

                    if (match == null || match(dd))
                    {
                        yield return d .FullName;
                    }
                }
            }
            
        }/// <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;
                    }
                }
            }
            
        }

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值