c#带递归的堆栈溢出错误

时间:2016-07-09 08:49:59

标签: c# recursion stack-overflow

我在服务器上做了完整的文件夹列表,但是大约有65,000个StackOverFlowException共享,有一个例外。如何到处走走

static List<string> FolderList = new List<string>();
static void Selection(DirectoryInfo dir)
{
    FolderList.Add(dir.FullName);
    foreach (var a_dir in dir.GetDirectories())
    {
        Selection(a_dir);
    }
}

1 个答案:

答案 0 :(得分:1)

当您具有未知深度时,使用递归不是一个好习惯。或者,您可以使用GetDirectories的重载(它使用Stack数据结构而不是递归):

<script src="~/scripts/custombox.js"></script>
<link href="~/css/custombox.css" rel="stylesheet" />
<script type="text/javascript">
    $(function () {
        $(".btnModal").click(function () {
            $("#modalBody").load($(this).attr("data-href"));
            Custombox.open({
                target: '#myModal',
                zIndex: 'auto'
            });
        });
    });
</script>
<a class="btnModal btn btn-primary" href="javascript:;" data-href="@Url.Action("Create")">New</a>
<div id="myModal" style="width:200px;height:200px;background-color:#fff;">
    <div id="modalBody">
    </div>
</div>

如果您仍然遇到异常,则需要将逻辑更改为传统的while循环。

以下static List<string> FolderList = new List<string>(); static void Selection(DirectoryInfo dir) { var dirs = dir.GetDirectories("*", SearchOption.AllDirectories); foreach (var a_dir in dirs) { FolderList.Add(dir.FullName); } } 的文档:

  

是searchPattern:

     

要匹配的名称的搜索字符串   目录。此参数可以包含有效文字的组合   路径和通配符(*和?)字符(请参阅备注),但不是   支持正则表达式。默认模式为&#34; *&#34;,返回   所有文件。

     

searchOption:

     

一个枚举值,指定搜索操作是否>应该只包括当前目录或所有子目录