public static List<ConvertedItem> BuildItemList(string[][] items) { if (null == items) { throw new ArgumentException("NULL item array!"); } #region Method 1: 2 Pass method (reduce duplication of logic) //List<MenuItem> menuItems = new List<MenuItem>(items.Length); //for (int i = 0; i < items.Length; i++) //{ // menuItems.Add(new MenuItem(items[i][Offsets.Name], // int.Parse(items[i][Offsets.Level]))); //} //return BuildItemList(menuItems); #endregion Method 1: 2 Pass method (reduce duplication of logic) #region Method 2: 1 Pass method (logic duplicated but no conversion to menu item list) List<ConvertedItem> convertedItems = new List<ConvertedItem>(); ConvertedItem parent = null; for (int i = 0; i < items.Length; i++) { if (!Convert.ToBoolean(int.Parse(items[i][Offsets.IsValid]))) { continue; } ConvertedItem item = new ConvertedItem(items[i][Offsets.Name], int.Parse(items[i][Offsets.Level])); if (null == parent || !IsCondiment(item)) { if (null != parent) { convertedItems.Add(parent); } parent = item; } else { if (null == parent.SubItems) { parent.SubItems = new List<ConvertedItem>(); } item.Level = Math.Min(item.Level, 1); //Normalize item levels parent.SubItems.Add(item); } } //Get the last parent into the list: convertedItems.Add(parent); return convertedItems; #endregion Method 2: 1 Pass method (logic duplicated but no conversion to menu item list) }
private static bool IsNextItemHigherLevel(ConvertedItem current, MenuItem next) { return null != current && current.Level > next.Level; }
private static bool IsCondiment(ConvertedItem current) { return current.Level > 0; }
protected bool Equals(ConvertedItem other) { return string.Equals(Name, other.Name) && Level == other.Level && Equals(SubItems, other.SubItems); }