private static void AssertSameSameSame(MenuItem item1, MenuItem item2, MenuItem item3) { var comparer = new MenuItemComparer(); Assert.That(comparer.Equals(item1, item2), Is.True); Assert.That(comparer.Equals(item1, item3), Is.True); Assert.That(comparer.Equals(item2, item3), Is.True); Assert.That(comparer.GetHashCode(item1), Is.EqualTo(comparer.GetHashCode(item2))); Assert.That(comparer.GetHashCode(item1), Is.EqualTo(comparer.GetHashCode(item3))); Assert.That(comparer.GetHashCode(item2), Is.EqualTo(comparer.GetHashCode(item3))); }
private static void AssertSameSameDifferent(MenuItem item1, MenuItem item2, MenuItem item3) { var comparer = new MenuItemComparer(); Assert.That(comparer.Equals(item1, item2), Is.True); Assert.That(comparer.Equals(item1, item3), Is.False); Assert.That(comparer.Equals(item2, item3), Is.False); Assert.That(comparer.GetHashCode(item1), Is.EqualTo(comparer.GetHashCode(item2))); // - hash inequality isn't really guaranteed, now that you mention it //Assert.That(comparer.GetHashCode(item1), Is.Not.EqualTo(comparer.GetHashCode(item3))); //Assert.That(comparer.GetHashCode(item2), Is.Not.EqualTo(comparer.GetHashCode(item3))); }
private static IEnumerable <MenuItem> Merge(IEnumerable <IEnumerable <MenuItem> > sources) { var comparer = new MenuItemComparer(); var orderer = new FlatPositionComparer(); return(sources.SelectMany(x => x).ToArray() //相同的菜单 .GroupBy(key => key, (key, items) => Join(items), comparer) //相同的位置 .GroupBy(item => item.Position) .OrderBy(positionGroup => positionGroup.Key, orderer) .SelectMany(positionGroup => positionGroup.OrderBy(item => item.Text == null ? string.Empty : item.Text.TextHint))); }
private static IEnumerable <MenuItem> Merge(IEnumerable <IEnumerable <MenuItem> > sources) { var comparer = new MenuItemComparer(); var orderer = new FlatPositionComparer(); return(sources.SelectMany(x => x).ToArray() // group same menus .GroupBy(key => key, (key, items) => Join(items), comparer) // group same position .GroupBy(item => item.Position) // order position groups by position .OrderBy(positionGroup => positionGroup.Key, orderer) // ordered by item text in the postion group .SelectMany(positionGroup => positionGroup.OrderBy(item => item.Text == null ? "" : item.Text.TextHint))); }
private static IEnumerable<MenuItem> Merge(IEnumerable<IEnumerable<MenuItem>> sources) { var comparer = new MenuItemComparer(); var orderer = new PositionComparer(); return sources.SelectMany(x => x).ToArray() .GroupBy(key => key, (key, items) => Join(items), comparer) .OrderBy(item => item.Position, orderer); }
private static IEnumerable<MenuItem> Merge(IEnumerable<IEnumerable<MenuItem>> sources) { var comparer = new MenuItemComparer(); var orderer = new FlatPositionComparer(); return sources.SelectMany(x => x).ToArray() // group same menus .GroupBy(key => key, (key, items) => Join(items), comparer) // group same position .GroupBy(item => item.Position) // order position groups by position .OrderBy(positionGroup => positionGroup.Key, orderer) // ordered by item text in the postion group .SelectMany(positionGroup => positionGroup.OrderBy(item => item.Text == null ? "" : item.Text.TextHint)); }
private static IEnumerable<MenuItem> Merge(IEnumerable<IEnumerable<MenuItem>> sources) { var comparer = new MenuItemComparer(); var orderer = new FlatPositionComparer(); return sources.SelectMany(x => x).ToArray() //相同的菜单 .GroupBy(key => key, (key, items) => Join(items), comparer) //相同的位置 .GroupBy(item => item.Position) .OrderBy(positionGroup => positionGroup.Key, orderer) .SelectMany(positionGroup => positionGroup.OrderBy(item => item.Text == null ? string.Empty : item.Text.TextHint)); }