public string GetFormattedNumber(int numId, int iLvl) { if (numbering == null || iLvl < 0 || numId == -1) { return(string.Empty); } var instances = numbering.Where(r => r is NumberingInstance).Select(r => r as NumberingInstance).ToList(); var instance = instances.Where(r => r.NumberID.HasValue && r.NumberID.Value == numId).FirstOrDefault(); if (instance == null) { return(string.Empty); } int currAbNumId = instance.AbstractNumId.Val.Value; var abstractNums = numbering.Where(r => r is AbstractNum).Select(r => r as AbstractNum); var abNum = abstractNums.Where(r => r.AbstractNumberId.HasValue && r.AbstractNumberId.Value == instance.AbstractNumId.Val.Value) .Select(r => r).FirstOrDefault(); ParagraphLevelCounter lc; listLevelMap.TryGetValue(currAbNumId, out lc); LevelTuple[] overrideTuples; overrideTupleMap.TryGetValue(numId, out overrideTuples); if (lc == null) { lc = LoadLevelTuples(abNum); } if (overrideTuples == null) { overrideTuples = LoadOverrideTuples(abNum, lc.LevelCount); } string formattedString = lc.IncrementLevel(iLvl, overrideTuples); listLevelMap[currAbNumId] = lc; overrideTupleMap[numId] = overrideTuples; return(formattedString); }