microsoft - Requisitos de versión de C#7.NET/CLR/Visual Studio
visual studio installer (2)
¿Cuáles son los requisitos mínimos de la versión de .NET framework y CLR para ejecutar C # 7? Además, ¿necesito VS 2017 para compilar C # 7?
Para utilizar toda la potencia de C # 7 fuera de la caja (sin hacer referencia a nugets, etc.), necesita VS 2017 y .Net 4.7 como Marco de destino.
NO es necesario apuntar a .NET 4.6 y superior, eso es incorrecto. Para usar Tuples, necesita el paquete System.ValueTuple NuGet. Justo en https://www.nuget.org/packages/System.ValueTuple/ puede ver que dice que admite 4.5 y superior, y en realidad, es compatible con 4.0 y superior. Y si quiere volverse loco, si crea su propia clase System.ValueTuple
que hace exactamente lo que hace ese paquete, funcionará con .NET 3.5 y probablemente también con System.ValueTuple
anteriores. Para los tipos de "tareas similares", también necesita un paquete NuGet, https://www.nuget.org/packages/System.Threading.Tasks.Extensions/ . Este paquete también funciona en .NET 4.5 y versiones posteriores de acuerdo con su documentación.
Otras características de C # 7 solo funcionarán en .NET 2 y superiores, ya que son solo azúcar sintáctico. Por ejemplo, acabo de escribir lo siguiente en .NET 2.0 y arroja correctamente:
static void Main(string[] args)
{
string test = null;
string d = test ?? throw new ApplicationException("test");
}
Del mismo modo, int.TryParse("123", out int i);
funciona bien en .NET 2.0.
No probé todas las funciones de C # 7, pero en general, con la excepción de Tuples (y sus funciones relacionadas, como deconstrucción), debería funcionar en .NET 2.0 y superior, ya que la mayor parte es azúcar sintáctica. Dicho esto, sí necesita VS2017 para compilar C # 7. Estoy seguro de que en algún momento otros compiladores soportarán C # 7 pero no hoy.
Características Confirmé el trabajo en .NET 2.0:
- Literales binarios
- Separadores de dígitos
- Parámetros de
out
línea - Usando
_
para descartar los parámetros - Funciones locales
- Conformidad de patrón basada en tipo
if (obj is int i)
ycase int i:
- Patrón de coincidencia constante
if (i is 2)
- Coincidencia de patrón var
if (i is var j)
- Ref devoluciones
- Lanzar expresiones
- Expression getters y setters
- Constructores y finalizadores con cuerpo de expresión