using System.Collections.Generic;
public static void Main()
var foo = new ValueSortedKeyValuePairSet(){
new KeyValuePair<int,string>(1,"aaa"),
new KeyValuePair<int,string>(2,"aaaaaa"),
new KeyValuePair<int,string>(3,"aa")
foreach(var t in foo) Console.WriteLine("Key: {0} Value: {1}", t.Key, t.Value);
public class ValueSortedKeyValuePairSet : SortedSet<KeyValuePair <int, string>>
private class StringLengthComparerDecending : IComparer<KeyValuePair <int, string>>
public int Compare(KeyValuePair <int, string> x, KeyValuePair <int, string> y)
var lengthComparison = x.Value.Length.CompareTo(y.Value.Length);
return lengthComparison == 0 ? string.Compare(x.Value, y.Value, StringComparison.Ordinal) : lengthComparison;
public ValueSortedKeyValuePairSet() : base(new StringLengthComparerDecending()) {}
public ValueSortedKeyValuePairSet(IEnumerable<KeyValuePair <int, string>> e) : base(e, new StringLengthComparerDecending()) {}