An undefined ValueTuple is an empty tuple. Since ValueTuple is a structure, this means that every instance of ValueTuple is equal, and therefore the collection does not need to be sorted except for an empty ValueTuples.
Comparing ValueTuple with null returns 1 for the same reason, comparing an empty string with null returns 1 - because you are not comparing anything :)
Common ValueTuple variants that represent tuples of one or more elements implement IComparable.CompareTo() as you would expect.
Note that Tuple itself is a static class, while all its common variants are non-empty tuples. Tuple simply contains factory methods for its non-empty options.
source share