Hacer variables nullables
A las variables como int
no se le puede asignar null
. Hay que declararlas como int?
.
int edad = null; // compilation error
int? edad = null; // OK
operadores nullables
x.y
acceso a miembros
x?.y
acceso a miembros que pueden ser null. Devuelve null si el operando izquierdo es null.
x?[y]
lo mismo para acceder a indices cuyos contenedores pueden ser null.
Como castear
Como hacer un cast a una variable de un tipo a otro tipo.
double valor = 8.45;
int entero = Convert.ToInt32(valor);
readonly
La palabra clave readonly
hace que no se pueda asignar después de que el constructor acabe.
class Age
{
private readonly int _year;
Age(int year)
{
_year = year;
}
void ChangeYear()
{
_year = 1967; // Compilation error
}
}
readonly vs const
For readonly
values can be computed dynamically, but need to be assigned before the constructor exits. In the other hand const
are implicitly static.
public class ReadonlyVsConst
{
public const int I_VALUE = 2; // HAS TO be assigned on declaration.
public readonly int I_RO_VALUE; // Can be assigned on the constructor.
public ReadonlyVsConst()
{
I_RO_VALUE = 3;
}
}
var vs dynamic
var
existe sobre todo para dar soporte a los tipos anónimos. Con var
se declara una variable cuyo tipo se infiere a partir de la expresión que se le asigna. var no significa que la variable sea dinámica.
var i = 10;
int i2 = i + 1;
i = 20; // this fails
string s = i; // this also fails
var k = null; // also fails
dynamic
no se sabe que tipo va a ser en tiempo de compilacion pero si en tiempo de ejecucion. dynamic si que permite declarar una variable dinámica
dynamic i = 12;
int i2 = i + 1;
i = "20"; // OK
string s = i; // OK
dynamic k = null; // OK
Regiones
Son como comentarios pero el código entre regiones se puede comprimir.
#region
var mensaje = "Hola"
#endregion
Como usar palabras reservadas
Las palabras reservadas como if
se pueden usar si se pone un @
delante.
var if = 2; // fails
var @if = 2; // OK
Cuando se añaden nuevas keywords, se hace como palabras clave contextuales. Esto evita problemas de compilación para programas con versiones anteriores.