Comparteix a través de


Novedades de C# 15

C# 15 incluye las siguientes características nuevas. Pruebe estas características mediante la versión más reciente de Visual Studio 2026 insiders o el SDK de versión preliminar de .NET 11:

C# 15 es la versión preliminar más reciente de C#. Las versiones preliminares de .NET 11 admiten C# 15. Para obtener más información, vea Control de versiones del lenguaje C#.

Puede descargar el SDK de versión preliminar de .NET 11 más reciente desde la página de descargas de .NET. También puede descargar visual Studio 2026 insiders, que incluye el SDK de versión preliminar de .NET 11.

La página "Novedades de C#" agrega nuevas características cuando están disponibles en versiones preliminares públicas. La sección conjunto de trabajo de la página de estado de características de roslyn realiza un seguimiento cuando se combinan las próximas características en la rama principal.

Puede encontrar los cambios importantes introducidos en C# 15 en nuestro artículo sobre los cambios importantes.

Nota:

Estamos interesados en sus comentarios sobre estas características. Si encuentra problemas con cualquiera de estas nuevas características, cree un nuevo problema en el repositorio dotnet/roslyn.

Argumentos de expresión de colección

Puede pasar argumentos al constructor o al método factory de la colección subyacente mediante un with(...) elemento como primer elemento de una expresión de colección. Esta característica permite especificar capacidad, comparadores u otros parámetros de constructor directamente dentro de la sintaxis de la expresión de colección.

En el ejemplo siguiente se muestra cómo pasar un argumento de capacidad a un List<T> constructor y un comparador a :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

Para más información sobre los argumentos de expresiones de colección, consulte el artículo de referencia del lenguaje sobre expresiones de colección o la especificación de características. Para obtener información sobre el uso de argumentos de expresión de colección en inicializadores de colección, vea Inicializadores de objeto y colección.

Tipos de unión

C# 15 presenta tipos de unión, que representan un valor que puede ser uno de varios tipos de casos. Declare una unión utilizando la palabra clave 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);

Las uniones proporcionan conversiones implícitas de cada tipo de caso y el compilador garantiza que switch las expresiones son exhaustivas en todos los tipos de casos:

Pet pet = new Dog("Rex");

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

Los tipos de unión aparecieron por primera vez en .NET 11 Preview 2. En las primeras versiones preliminares de .NET 11, la UnionAttribute interfaz y IUnion no se incluyen en el entorno de ejecución, por lo que debe declararlas en el proyecto. Las versiones preliminares posteriores de .NET 11 incluyen estos tipos de tiempo de ejecución. Además, algunas características de la especificación de propuesta aún no se implementan, incluidos los proveedores de miembros de la unión. Estas características vienen en futuras versiones preliminares.

Para obtener más información, consulte Tipos de unión en la referencia del lenguaje o la especificación de características.