Explore union types in C# 15
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 06.04.26 09:37
Оценка: 5 (2)
https://devblogs.microsoft.com/dotnet/csharp-15-union-types/

Это аналог TypeScript Union-типы в TypeScrip

function printId(id: number | string) {
  console.log("Your ID is: " + id);
}


Раньше приходилось все объявлять object

До выхода C# 15, когда метод должен был возвращать один из нескольких возможных типов, у вас были не самые удачные варианты. Использование object не накладывало никаких ограничений на то, какие типы будут храниться в памяти, — там мог оказаться любой тип, и вызывающей стороне приходилось писать защитную логику на случай непредвиденных значений. Интерфейсы-маркеры и абстрактные базовые классы были лучше, потому что они ограничивали набор типов, но их нельзя было назвать «закрытыми» — любой мог реализовать интерфейс или унаследовать базовый класс, поэтому компилятор никогда не мог считать набор полным. Кроме того, оба подхода требуют, чтобы у типов был общий предок, что не работает, если вам нужен союз несвязанных типов, таких как string и Exception или int и IEnumerable<T>.

Объединённые типы решают эти проблемы. Объединение объявляет закрытый набор типов-кейсов — они не обязательно должны быть связаны друг с другом, и к ним нельзя добавлять другие типы. Компилятор гарантирует, что switch выражения, обрабатывающие объединение, являются исчерпывающими и охватывают все типы-кейсы без необходимости использования discard _ или ветки default. Но это не просто исчерпывающий набор: объединения позволяют создавать структуры, которые невозможно выразить с помощью традиционных иерархий, объединяя любые комбинации существующих типов в единый контракт, проверяемый компилятором.

и солнце б утром не вставало, когда бы не было меня
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.