我正在对现有 ASP.NET MVC 应用程序中的函数进行一些重构,并在控制器中遇到了以下小递归函数。我对 C# 和 .NET 还是有点陌生,所以如果我做错了什么,请多多包涵。
private int _bl;
[Session]
public void TotalMaterialSubCategories(IEnumerable<Category> materialMasterCats, int i)
{
foreach (var materialMasterCat in materialMasterCats)
{
_bl = _bl + 1;
materialMasterCat.Level = i;
if (materialMasterCat.ChildCategories.Count != 0)
{
TotalMaterialSubCategories(materialMasterCat.ChildCategories.ToList(), i + 1);
if (materialMasterCat.Parent == 0)
{
materialMasterCat.SortOrder = _bl;
_bl = 0;
}
}
}
}
令我担心的是这private int _bl句话。在这个类中,对这个变量的唯一引用与这个函数相关联。
我认为该线路_b1 = _b1 + 1可能不可靠,因为它没有手动初始化。尽管如此,我相信因为它是一个int,所以它不能为空或“未初始化”,所以它的默认值是 0;MS Docs 证实了这一点。递归看起来像冒泡的方式让我认为在这个函数调用结束时它也会被设置回 0。最后,我很确定每个独立的 Web 请求都会获得这个控制器的一个单独实例,所以看起来就像它的编写方式一样,它应该按预期运行。
然而,我只是有点想知道为什么会这样写。有没有理由认为这不仅仅是函数的局部变量,用 0 初始化?您可以跨控制器中的函数依赖局部私有变量吗?另外,我的任何假设/决定是否不正确?
阿晨1998
一只萌萌小番薯
相关分类