It is implicit, but may be you should have mentioned the declaration of your "myList".
let me write it for you.
var myList=new List<KeyValuePair<string, int>>();
Now, what it means is that each item in this list is an instance of KeyValuePair[string,int].
Now, coming to your question.
One of the overloads of Sort method accepts a "Comparison" delegate, which takes two items of a collection and returns an integer number.
public delegate int Comparison<T>(T x, T y)
Essentially, what you are doing is creating an anonymous delegate which compares two items (in your case, you are sorting on 'Value' you can even sort on 'Key') using the "CompareTo" method of IComparable (string and int implement this interface).
IComparable.CompareTo returns an integer (which is used by Sort method to arrange the items in your list) stating that lhs is less than (-1), greather than (1) or equal to (0) rhs.
FYI: In case you are working on C# 3.0, you dont even need anonymous delegate. You can use lambda expression instead (it is a shorthand to define anonymous delegate, more? )
eg:
myList.Sort((x, y) => x.Value.CompareTo(y.Value));
//Sort over Value
myList.Sort((x, y) => x.Key.CompareTo(y.Key));
//Sort over key
Hope the explanation is helpful.