In case you happen to have a generic method that returns a generic value but doesn't have generic parameters, you can use default(t) + (t)(object) cast, together with c# 8 pattern. Static generic methods allow type-inference to make usage really easy; Static fields on generic classes allow virtually overhead-free storage of (meta)data.

What keeps us from comparing the values of generic types which are known to be icomparable? Doesn't it somehow defeat the entire purpose of generic constraints?