por - Operador nulo condicional e interpolación de cadenas en C#6
string c# ejemplos (3)
Como la mayoría de las nuevas características en C # 6.0, el operador condicional nulo es solo un atajo (azúcar sintáctica, si quiere llamarlo) para un patrón de obtención del valor de un miembro si la instancia que se usa en la variable no es nula .
Dada una s
de tipo string
, esto:
int? l = s?.Length;
se traduce a:
int? l = s == null ? null : s.Length;
Y se puede combinar con el operador de unión nula ( ??
):
int l = s?.Length ?? 0;
La interpolación de cadenas también comenzó como una forma abreviada de string.Format
pero evolucionó a un patrón que puede producir una string
o un IFormatble
. Por favor, consulte la especificación actual para más información.
Y, por cierto, roslyn es el nombre en código de la plataforma del compilador, no los idiomas o sus características.
¿Se resuelven la sintaxis del operador condicional nulo y las cadenas interpoladas a solo azúcar sintáctica ?
El operador condicional nulo ( ?.
), Que permite la limpieza del código mediante la reducción de la comprobación null
"excesiva", y las cadenas interpoladas ( ("/{X}, /{Y}")
), que trae los argumentos y el formato a Uno, son nuevas características en C # 6.
¿Se compilan a sus contrapartes indeseables (es decir, el código feo que intentamos evitar)?
Pido disculpas por la ingenua pregunta, no tengo la mejor comprensión de los idiomas en general, pero tengo curiosidad por saber si sería posible ejecutar estas funciones en, por ejemplo, C # 5.
Sé que este es el caso de Java en algunos casos, ¿es cierto también con estos ejemplos?
El operador de Elvis es muy útil al llamar al evento RaisePropertyChanged.
En el pasado escribirías
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(nameof(X));
}
Pero hubo un problema potencial de subprocesos múltiples si PropertyChanged se estableció en nulo antes de ser invocado. En su lugar puedes escribir:
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(X));
Lo que evita por completo el problema de los subprocesos múltiples, por lo que no se trata de azúcar de Sintaxis.
No hay una regla general, difiere. Algunas características son simplemente azúcar sintáctica, algunas capacidades adicionales que antes no eran posibles y otras son una combinación de ambas.
Azúcar sintáctica
Interpolación de cuerdas - esto:
string result = $"{bar}";
En lugar de:
string result = string.Format("{0}", bar);
Operador de propagación nula (
?.
) - Este:var result = Foo()?.Length
En lugar de:
var temp = Foo(); var result = (temp != null) ? temp.Length : null;
Nuevas capacidades
Interpolación de cadenas: también agrega soporte para
IFormattable
utilizandoFormattedString
por lo que es posible:IFormattable result = $"{bar}"
Esperar captura / finalmente: ahora es posible usar
await
encatch
yfinally
bloques:try { } catch { await Task.Delay(1000); }
Por supuesto, hay más características en ambas categorías, como los filtros de excepción y los miembros con cuerpo de expresión.