если передать byte[], то сравнивать не хочет, объясните, пожаулйста
Потому что компилятор генерирует вот такое:
EqualityComparer<byte[]>.Default.Equals(<x>k__BackingField, other.<x>k__BackingField);
Если тебе нужно сравнение по содержимому массивов - тебе придётся самостоятельно определить метод с вот такой сигнатурой:
public virtual bool Equals(TypeEncoding other) {
// код сравнения this с other
}
А также тебе придётся переопределить GetHashCode, чтобы он на одинаковых массивах отдавал одинаковое число.
Но тут есть нюанс - GetHashCode не должен зависеть от изменяемых типов/полей. Тоесть тебе по хорошему нельзя будет менять содержимое этих массивов, а то можешь получить неприятные спецэффекты, если hashcode поменяется.