Introduction to C#

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.

(more info)

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.