Menu
Coddy logo textTech

Hoja de Trucos de C#

Última actualización

Hola Mundo y estructura del programa

Las sentencias de nivel superior (desde .NET 6) te permiten omitir la clase repetitiva.

ElementoCódigo
Programa de nivel superiorConsole.WriteLine("Hello, World!");
Importar un espacio de nombresusing System;
Punto de entrada clásicostatic void Main(string[] args) { ... }
Imprimir una líneaConsole.WriteLine("text");
Leer una líneastring s = Console.ReadLine();
Interpolación de cadenasConsole.WriteLine($"Hi {name}");
Comentarios// line y /* block */

Tipos de datos

TipoDescripción
intEntero con signo de 32 bits
longEntero con signo de 64 bits
double / floatNúmeros de punto flotante
decimalDecimal de alta precisión (dinero)
booltrue o false
charUn solo carácter Unicode
stringTexto inmutable
varEl compilador infiere el tipo
int?Tipo de valor anulable

Variables

OperaciónSintaxis
Declarar e inicializarint x = 5;
Inferencia de tipovar name = "Ada";
Constanteconst double Pi = 3.14159;
Campo de solo lecturareadonly int id;
Referencia anulablestring? maybe = null;
Fusión de nulosvar y = maybe ?? "default";
Condicional de nuloint? len = text?.Length;

Control de flujo

SentenciaSintaxis
If / elseif (x > 0) { ... } else { ... }
Sentencia switchswitch (n) { case 1: ...; break; default: ...; }
Expresión switchvar s = n switch { 1 => "one", _ => "other" };
Bucle whilewhile (i < n) { ... }
Bucle do-whiledo { ... } while (i < n);
Bucle forfor (int i = 0; i < n; i++) { ... }
Bucle foreachforeach (var item in list) { ... }
Break / continuebreak; sale de un bucle, continue; salta a la siguiente iteración

Métodos

OperaciónSintaxis
Definir un métodoint Add(int a, int b) { return a + b; }
Cuerpo de expresiónint Add(int a, int b) => a + b;
Sin valor de retornovoid Greet() { ... }
Parámetro opcionalint Pow(int b, int e = 2) { ... }
Argumentos con nombrePow(b: 2, e: 3);
Parámetro outbool TryParse(string s, out int n) { ... }
Método estáticostatic int Square(int x) => x * x;
Expresión lambdaFunc<int, int> f = x => x * 2;

Clases y POO

OperaciónSintaxis
Definir una claseclass Dog { ... }
Propiedad automáticapublic string Name { get; set; }
Propiedad de solo lecturapublic int Id { get; }
Constructorpublic Dog(string name) { Name = name; }
Crear un objetovar d = new Dog("Rex");
Herenciaclass Puppy : Dog { ... }
Interfazinterface IRunnable { void Run(); }
Sobrescribir un métodopublic override void Speak() { ... }
Record (inmutable)record Point(int X, int Y);

Colecciones

Colecciones genéricas de System.Collections.Generic.

TipoUso y ejemplo
List<T>Array dinámico: list.Add(1); list.Count;
Dictionary<K, V>Clave-valor: dict["a"] = 1; dict.ContainsKey("a");
HashSet<T>Valores únicos: set.Add(5); set.Contains(5);
Queue<T>FIFO: q.Enqueue(x); q.Dequeue();
Stack<T>LIFO: s.Push(x); s.Pop();
Arrayint[] nums = { 1, 2, 3 };
Inicializador de colecciónvar l = new List<int> { 1, 2, 3 };
Iterar un diccionarioforeach (var kv in dict) { kv.Key; kv.Value; }

LINQ

Consulta colecciones de forma fluida; de System.Linq.

OperaciónSintaxis
Filtrarnums.Where(n => n > 0)
Proyectar / mapearnums.Select(n => n * 2)
Ordenarnums.OrderBy(n => n) / OrderByDescending(...)
Primera coincidencianums.First(n => n > 5) / FirstOrDefault(...)
Alguno / todosnums.Any(n => n < 0) / nums.All(n => n > 0)
Contar coincidenciasnums.Count(n => n > 0)
Agregarnums.Sum(), nums.Max(), nums.Average()
Agrupar poritems.GroupBy(i => i.Category)
Materializar.ToList() / .ToArray()

Patrones comunes (propiedades, async)

PatrónSintaxis
Método asyncasync Task<int> GetAsync() { ... }
Esperar una tareavar result = await GetAsync();
Try / catchtry { ... } catch (Exception e) { ... }
Finallyfinally { ... } siempre se ejecuta
Using (liberar)using var file = File.OpenRead(path);
Formato de cadenas$"Total: {amount:C}"
Clase genéricaclass Box<T> { public T Value; }
Coincidencia de patronesif (obj is Dog d) { d.Bark(); }

La sintaxis, las colecciones y las consultas LINQ de C# que más usas, en una sola página. Esta hoja de trucos de C# es una referencia rápida para escribir C#: los tipos de datos, el control de flujo, las clases, las colecciones List/Dictionary, LINQ y los patrones de propiedades y async que definen el código idiomático de .NET.

Todo lo que hay aquí es C# estándar sobre .NET y se ejecuta con la CLI de dotnet. Copia lo que necesites o prueba cualquier fragmento en vivo en el playground de C#, sin instalar ningún SDK.

Preguntas frecuentes sobre la hoja de trucos de C#

¿Esta hoja de trucos de C# es gratis?
Sí. Esta hoja de trucos de C# es completamente gratuita, sin necesidad de registrarse. Guárdala en favoritos y vuelve cuando necesites consultar la sintaxis, una colección o un método de LINQ.
¿Cuál es la diferencia entre tipos de valor y tipos de referencia en C#?
Los tipos de valor (int, double, bool, struct, enum) contienen sus datos directamente y se copian cuando se asignan o se pasan a un método: cambiar la copia no afecta al original. Los tipos de referencia (class, string, arrays, List<T>) contienen una referencia a datos en el heap, así que dos variables pueden apuntar al mismo objeto y un cambio a través de una es visible a través de la otra. string es un tipo de referencia pero se comporta de forma inmutable.
¿Qué es LINQ y cuándo debería usarlo?
LINQ (Language Integrated Query) es un conjunto de métodos como Where, Select y OrderBy que te permiten filtrar, transformar y agregar colecciones con llamadas legibles y encadenables en lugar de bucles manuales. Úsalo siempre que de otro modo escribirías un bucle para construir una lista filtrada o proyectada: es conciso y se evalúa de forma perezosa hasta que llamas a ToList() o iteras.
¿Puedo practicar C# en línea?
Sí. Abre el playground de C# para ejecutar cualquier fragmento de esta hoja de trucos en tu navegador, sin instalar ningún SDK. Cuando quieras estructura, el curso interactivo y gratuito de C# de Coddy te lleva paso a paso desde las variables y los bucles hasta las clases, las colecciones y LINQ.
¿Esta hoja de trucos es buena para principiantes?
Sí. Está organizada desde los componentes básicos más comunes (tipos, control de flujo, métodos) hasta los avanzados (LINQ, async, genéricos), de modo que puedes usar las secciones de arriba desde el primer día e ir avanzando hacia el resto.
Coddy programming languages illustration

Aprende C# con Coddy

COMENZAR