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. Но это не просто исчерпывающий набор: объединения позволяют создавать структуры, которые невозможно выразить с помощью традиционных иерархий, объединяя любые комбинации существующих типов в единый контракт, проверяемый компилятором.

и солнце б утром не вставало, когда бы не было меня
Re: Explore union types in C# 15
От: amironov79  
Дата: 06.04.26 11:24
Оценка: +2
Здравствуйте, Serginio1, Вы писали:

S>https://devblogs.microsoft.com/dotnet/csharp-15-union-types/


Наконец-то Хотя еще полтора года до lts ждать.
Re: Explore union types in C# 15
От: novitk США  
Дата: 06.04.26 12:26
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

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

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

+1.
Если кто не в курсе, сейчас есть неплохой костыль OneOf.
Re[2]: Explore union types in C# 15
От: amironov79  
Дата: 06.04.26 13:46
Оценка:
Здравствуйте, novitk, Вы писали:

N>Если кто не в курсе, сейчас есть неплохой костыль OneOf.


Их таких неплохих с десяток наберётся Но не долго им осталось.
Re[3]: Explore union types in C# 15
От: novitk США  
Дата: 06.04.26 16:19
Оценка:
Здравствуйте, amironov79, Вы писали:

A>Их таких неплохих с десяток наберётся Но не долго им осталось.

A какие еще? В OneOf особенно костылит бойлерплейт по написания и поддержке осмысленно названных оберток над AsT0, IsT1 и т.д.
Я шарпистом стал не давно, но после Скалы жить без DU не могу.
Отредактировано 06.04.2026 16:24 novitk . Предыдущая версия .
Re[4]: Explore union types in C# 15
От: amironov79  
Дата: 07.04.26 03:51
Оценка: 10 (1)
Здравствуйте, novitk, Вы писали:

N>A какие еще? В OneOf особенно костылит бойлерплейт по написания и поддержке осмысленно названных оберток над AsT0, IsT1 и т.д.

N>Я шарпистом стал не давно, но после Скалы жить без DU не могу.

По памяти https://github.com/kolebynov/Dusharp и https://github.com/domn1995/dunet. Гугл в ИИ сводке подсказывает https://github.com/christiandaley/SumSharp и https://github.com/PawelGerr/Thinktecture.Runtime.Extensions. У всех одна проблема -- несовместимость друг с другом.
Re: Explore union types in C# 15
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.04.26 22:57
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>https://devblogs.microsoft.com/dotnet/csharp-15-union-types/


Обожаю когда одноклеточные узнают о том, что МС открыл им мир, который существует тысячи лет.

Ну хоть так. А то когда вам говоришь, что variant-ы Немерле или дискрименэтед Юнион из ML (ни разу не машин лернинг, а язак из 70х) надо добавить в дотнет, вы все сразу говорите, что не надо, у нас все есть.

Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Explore union types in C# 15
От: amironov79  
Дата: 17.04.26 06:51
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

VD>Обожаю когда одноклеточные узнают о том, что МС открыл им мир, который существует тысячи лет.


VD>Ну хоть так. А то когда вам говоришь, что variant-ы Немерле или дискрименэтед Юнион из ML (ни разу не машин лернинг, а язак из 70х) надо добавить в дотнет, вы все сразу говорите, что не надо, у нас все есть.


VD>Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦


Гордыня -- смертный грех, если что. Неужели ты думаешь, что разработчик, хоть немного интересующийся программированием в целом, не в курсе этого?
Re[2]: Explore union types in C# 15
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 17.04.26 10:00
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Serginio1, Вы писали:


S>>https://devblogs.microsoft.com/dotnet/csharp-15-union-types/


VD>Обожаю когда одноклеточные узнают о том, что МС открыл им мир, который существует тысячи лет.


VD>Ну хоть так. А то когда вам говоришь, что variant-ы Немерле или дискрименэтед Юнион из ML (ни разу не машин лернинг, а язак из 70х) надо добавить в дотнет, вы все сразу говорите, что не надо, у нас все есть.


VD>Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦


Угу сам то на чем программируешь многоклеточный ты наш? Не уж то на Немерле и МЛ?
Когда я говорил, что не надо? Я как раз расхваливал эту фичу из TypeScript.
и солнце б утром не вставало, когда бы не было меня
Re[3]: Explore union types in C# 15
От: Слава  
Дата: 19.04.26 00:24
Оценка:
Здравствуйте, Serginio1, Вы писали:

VD>>Мля в Немерле 20 лет. В МЛ 30. А вы радуетесь в 2026м? 🤦


S> Угу сам то на чем программируешь многоклеточный ты наш? Не уж то на Немерле и МЛ?

S>Когда я говорил, что не надо? Я как раз расхваливал эту фичу из TypeScript.

Я вполне понимаю Влада. Индустрия чёрт знает чем занимается уже больше 30 лет.
Re[4]: Explore union types in C# 15
От: amironov79  
Дата: 19.04.26 04:46
Оценка:
Здравствуйте, Слава, Вы писали:

С>Здравствуйте, Serginio1, Вы писали:


S>> Угу сам то на чем программируешь многоклеточный ты наш? Не уж то на Немерле и МЛ?

S>>Когда я говорил, что не надо? Я как раз расхваливал эту фичу из TypeScript.

С>Я вполне понимаю Влада. Индустрия чёрт знает чем занимается уже больше 30 лет.


Так пускай идет к людям, которые определяют развитие языка, и их оскорбляет.
Re[3]: Explore union types in C# 15
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.04.26 02:11
Оценка: :)
Здравствуйте, amironov79, Вы писали:

A>Гордыня -- смертный грех, если что. Неужели ты думаешь, что разработчик, хоть немного интересующийся программированием в целом, не в курсе этого?


Я не то что думаю. Я 100% знаю, что 99% разработчиков искренне считают, что МС миссия и даёт им новые знания, а не осторожничает 30 лет и тормозит прогресс.

Большинство людей, включая программистов, не знаю ни истории, ни технологий.

По этому они так неистово радуются огрызкам которые им выдают в 2026 не смотря на то, что все это в более обобщенном виде было 20, а то и 30 лет назад.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Explore union types in C# 15
От: amironov79  
Дата: 22.04.26 03:43
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Я не то что думаю. Я 100% знаю, что 99% разработчиков искренне считают, что МС миссия и даёт им новые знания, а не осторожничает 30 лет и тормозит прогресс.


Таких всё меньше, к тому же с того времени, как выпустили .net core, такого мнения я не встречал

VD>Большинство людей, включая программистов, не знаю ни истории, ни технологий.


Думаю, что люди, которые пришли на rsdn, в большинстве интересуются и историей, и технологиями. Другой разговор, что их мнение может отличаться от твоего

VD>По этому они так неистово радуются огрызкам которые им выдают в 2026 не смотря на то, что все это в более обобщенном виде было 20, а то и 30 лет назад.


Ты это так описываешь, как будто люди на улицу праздновать выходят с транпарантами "Даешь объединения" и "Догоним и перегоним МетаЯзыки" А здесь всего лишь обсудили, что хорошо, что появились стандартные du.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.