public override SiteMapNode BuildSiteMap()
{
for (int i = 0; i < 5; i++)
myRoot.ChildNodes.Add(new SiteMapNode(this, i.ToString(), i.ToString(), i.ToString()));
return myRoot;
}
i 永遠為 0,反覆進入迴圈開頭。BuildSiteMap → ChildNodes.Add → 觸發 SiteMap 提供者內部邏輯 → 再次呼叫 BuildSiteMap → ...i=0。偵錯器顯示的「重置」實為進入下一層遞迴的新堆疊框架。void MyRecursiveFunction()
{
for (int i = 0; i < 5; i++)
MyRecursiveFunction(); // 斷點處 i 永遠為 0,呼叫堆疊疊加
}
BuildSiteMap 開頭檢查 if (_siteMapRoot != null) return _siteMapRoot; 快取結果,避免重複建構。_isBuilding = true 防止重入。SiteMap 提供者預設會快取,自訂時**必須自行實作快取**,否則每次存取 SiteMap.RootNode 皆觸發完整建構,導致遞迴災難。