C#, un lenguaje de programación potente y versátil dentro del ecosistema .NET, ofrece una serie de características y sintaxis elegantes que a menudo pasan desapercibidas. Microsoft no para de actualizar las funcionalidades y sintaxis que estan en boga actualmente con los nuevos lenguajes de programación. En este artículo, desvelaremos algunos de estos «códigos secretos» que pueden hacer tu programación en C# más fácil, profesional y significativamente más eficiente. Recuerda visitar nuestro blog y conocer más códigos y lenguajes que deberías conocer.

1. Expresiones Lambda Concisas (y su poder)
Las expresiones lambda son una forma abreviada de crear métodos anónimos. Aunque muchos las usan con LINQ, su poder va más allá:
C#
// Delegado Func para una función que toma un entero y devuelve un booleano
Func<int, bool> esPar = numero => numero % 2 == 0;
Console.WriteLine(esPar(4)); // True
Console.WriteLine(esPar(7)); // False
// Action para una función que toma una cadena y no devuelve nada
Action<string> saludar = nombre => Console.WriteLine($"Hola, {nombre}!");
saludar("Carlos"); // Hola, Carlos!
2. Operador de Coalescencia Nula (??
) y Asignación de Coalescencia Nula (??=
)
Estos operadores simplifican el manejo de valores nulos:
C#
string nombreUsuario = null;
string nombreMostrar = nombreUsuario ?? "Invitado"; // Si nombreUsuario es null, nombreMostrar será "Invitado"
Console.WriteLine(nombreMostrar); // Invitado
int? contador = null;
contador ??= 0; // Si contador es null, se le asigna 0
Console.WriteLine(contador); // 0
3. Interpolación de Cadenas ($""
)
Una forma legible y concisa de insertar variables directamente en cadenas:
C#
string nombre = "Ana";
int edad = 32;
string mensaje = $"El usuario {nombre} tiene {edad} años.";
Console.WriteLine(mensaje); // El usuario Ana tiene 32 años.
4. Inferencia de Tipos con var
Aunque no siempre es apropiado, var
permite al compilador inferir el tipo de una variable, reduciendo la redundancia:
C#
var mensaje = "Hola desde var!"; // El compilador infiere que mensaje es string
var numeros = new List<int> { 1, 2, 3 }; // El compilador infiere que numeros es List<int>
foreach (var numero in numeros)
{
Console.WriteLine(numero);
}

5. Patrones (is
y switch
mejorados)
C# ha introducido patrones de coincidencia poderosos que hacen que el código condicional sea más expresivo:
C#
object obj = "Hola";
if (obj is string s) // Pattern matching 'is'
{
Console.WriteLine($"La longitud de la cadena es: {s.Length}");
}
object figura = new Rectangulo { Ancho = 5, Alto = 10 };
switch (figura)
{
case Circulo c:
Console.WriteLine($"Es un círculo con radio {c.Radio}");
break;
case Rectangulo r when r.Ancho == r.Alto: // Pattern matching 'when' con condición
Console.WriteLine($"Es un cuadrado de lado {r.Ancho}");
break;
case Rectangulo r:
Console.WriteLine($"Es un rectángulo con ancho {r.Ancho} y alto {r.Alto}");
break;
case null:
Console.WriteLine("La figura es nula");
break;
default:
Console.WriteLine("Tipo de figura desconocido");
break;
}
public class Circulo { public double Radio { get; set; } }
public class Rectangulo { public double Ancho { get; set; } public double Alto { get; set; } }
6. Expresiones de Miembro con Cuerpo de Expresión (=>
)
Una sintaxis concisa para métodos, propiedades y constructores simples:
C#
public class Persona
{
private string Nombre { get; }
public int Edad { get; }
public Persona(string nombre, int edad) => (Nombre, Edad) = (nombre, edad); // Constructor
public string Presentarse() => $"Hola, mi nombre es {Nombre} y tengo {Edad} años."; // Método
private string _profesion;
public string Profesion
{
get => _profesion ?? "Desconocida"; // Propiedad con getter de cuerpo de expresión
set => _profesion = value; // Propiedad con setter de cuerpo de expresión
}
}
7. Tuplas para Devolver Múltiples Valores
Una forma sencilla y legible de devolver múltiples valores desde un método sin necesidad de crear clases o structs:
C#
public static (string nombre, int edad) ObtenerDatosUsuario()
{
return ("Ricardo", 28);
}
var (nombre, edad) = ObtenerDatosUsuario();
Console.WriteLine($"Nombre: {nombre}, Edad: {edad}"); // Nombre: Ricardo, Edad: 28
8. Descarte (_
)
El descarte ( _
) se utiliza para indicar que una variable no se va a utilizar, mejorando la legibilidad y evitando advertencias del compilador:
C#
var (nombreUsuarioIgnorado, edadUsuario) = ObtenerDatosUsuario();
Console.WriteLine($"Edad del usuario: {edadUsuario}"); // Edad del usuario: 28
foreach (var _ in Enumerable.Range(1, 5)) // Descartar el valor del elemento
{
Console.WriteLine("Iteración!");
}
9. Directivas using static
Importa miembros estáticos de una clase directamente, haciendo el código más conciso:
C#
using static System.Math;
using static System.Console;
double radio = 5;
double area = PI * Pow(radio, 2);
WriteLine($"El área del círculo es: {area}");
10. Inicializadores de Colecciones y Objetos
Una forma concisa de crear e inicializar colecciones y objetos:
C#
var nombres = new List<string> { "Elena", "David", "Sofía" };
var persona = new Persona { Nombre = "Javier", Edad = 40, Profesion = "Ingeniero" };
De igual manera te dejo un video con otros lenguajes que deberías conocer en este 2025
Conclusión
C# está repleto de características que, aunque a veces pasen desapercibidas, pueden hacer tu código más limpio, eficiente y expresivo. Explorar estas «joyas ocultas» te permitirá escribir código más profesional y disfrutar aún más del poder del lenguaje C#. Visita el sitio oficial de C# y conoce todo lo que puedes hacer con este lenaguaje.