Бөлісу құралы:


Новые возможности C# 15

C# 15 включает следующие новые функции. Попробуйте эти функции, используя последнюю инсайдерскую версию Visual Studio 2026 или предварительный пакет SDK .NET 11:

C# 15 — это последний выпуск предварительной версии C#. Предварительная версия .NET 11 поддерживает C# 15. Дополнительные сведения см. в разделе версии языка C# .

Вы можете скачать последний пакет SDK предварительной версии .NET 11 на странице загрузки .NET. Вы также можете скачать инсайдерскую версию Visual Studio 2026, включая предварительную версию SDK для .NET 11.

Страница "Новые возможности C#" добавляет новые функции, когда они доступны в общедоступных предварительных версиях. Раздел рабочего набора на странице статуса функций Roslyn отслеживает, когда предстоящие функции объединяются в основную ветвь.

Критические изменения, внесенные в C# 15, можно найти в нашей статье о критических изменениях.

Замечание

Мы заинтересованы в ваших отзывах об этих функциях. Если вы найдете проблемы с любым из этих новых функций, создайте новую проблему в репозитории dotnet/roslyn.

Аргументы выражения коллекции

Аргументы можно передать в конструктор подлежащей коллекции или фабричный метод, используя элемент with(...) в качестве первого элемента в выражении коллекции. Эта возможность позволяет вам указывать емкость, компараторы или другие параметры конструктора непосредственно в синтаксисе выражения коллекции.

В следующем примере показано, как передать аргумент емкости конструктору List<T> и компаратору HashSet<T>:

string[] values = ["one", "two", "three"];

// Pass capacity argument to List<T> constructor
List<string> names = [with(capacity: values.Length * 2), .. values];

// Pass comparer argument to HashSet<T> constructor
HashSet<string> set = [with(StringComparer.OrdinalIgnoreCase), "Hello", "HELLO", "hello"];
// set contains only one element because all strings are equal with OrdinalIgnoreCase

Дополнительные сведения о аргументах выражений коллекции см. в статье справочника по языку о выражениях коллекции или спецификации компонентов. Сведения об использовании аргументов выражения коллекции в инициализаторах коллекции см. в разделе "Инициализаторы объектов и коллекций".

Типы объединения

C# 15 представляет типы объединения, которые означают значение, являющееся одним из нескольких типов-кейсов. Объявите объединение с ключевым словом union :

public record class Cat(string Name);
public record class Dog(string Name);
public record class Bird(string Name);

public union Pet(Cat, Dog, Bird);

Объединения предоставляют неявные преобразования из каждого типа варианта, и компилятор гарантирует, что switch выражения охватывают все варианты типа:

Pet pet = new Dog("Rex");

string name = pet switch
{
    Dog d => d.Name,
    Cat c => c.Name,
    Bird b => b.Name,
};

Типы союзов впервые появились в .NET 11 ( предварительная версия 2). В предварительных версиях .NET 11 интерфейсы UnionAttribute и IUnion не включены во время выполнения, поэтому их необходимо объявить в проекте. Более поздние версии .NET 11 предварительной версии включают эти типы среды выполнения. Кроме того, некоторые функции из спецификации предложения еще не реализованы, включая поставщиков членов профсоюза. Эти функции будут доступны в будущих предварительных версиях.

Дополнительные сведения см. в разделе "Типы профсоюзов " в справочнике по языку или спецификации компонентов.