Советую присмотреться к двум типовым решениям для создания обёрток:
Использование готовых SourceGenerator'ов или написание своих. Например: https://github.com/andrewlock/StronglyTypedId Можно ещё и для еnum'ов генерировать через SourceGenerator'ы обёртки чтобы не писать постоянно Enum.IsDefined. Мы такое реализовали для себя
Написать свой t4 шаблон
Так же в статье не упомянута важная проблема создания структур через default, который весело проигнорирует все валидации
IComparable это только вершина айсберга. В для таких обёрток придётся реализовывать кучу разных "расширений" для того чтобы их можно было парсить/(де)сериализовывать вашим любимым сериализатором/конвертировать чтобы ORM корректно строила запросы. В общем создавая обёртку мы теряем весь функционал реализованный в различных библиотеках для примитивов. Решить эту проблему без поддержки со стороны языка, кажется нельзя.
Возвращаясь к теме предыдущей статьи: думаю что в проде стоит использовать готовое решение
Советую присмотреться к двум типовым решениям для создания обёрток:
Использование готовых SourceGenerator'ов или написание своих. Например: https://github.com/andrewlock/StronglyTypedId
Можно ещё и для еnum'ов генерировать через SourceGenerator'ы обёртки чтобы не писать постоянно Enum.IsDefined. Мы такое реализовали для себя
Написать свой t4 шаблон
Так же в статье не упомянута важная проблема создания структур через default, который весело проигнорирует все валидации
IComparable это только вершина айсберга. В для таких обёрток придётся реализовывать кучу разных "расширений" для того чтобы их можно было парсить/(де)сериализовывать вашим любимым сериализатором/конвертировать чтобы ORM корректно строила запросы. В общем создавая обёртку мы теряем весь функционал реализованный в различных библиотеках для примитивов.
Решить эту проблему без поддержки со стороны языка, кажется нельзя.