Mis indispensables de C#. Parte 1
Esta es una serie de 3 artículos cortos sobre características de C# que uso en todas mis aplicaciones... aunque este en particular empieza con una nueva.
Las switch expressions son mi característica favorita de C# 8. Ayudan a asignar valores rápidamente y las uso mucho para renderizar la interfaz gráfica.
Supongamos una Partial View que muestra el nombre de una empresa, consultor o institución, y un botón de color distinto para cada caso.
También funciona con métodos, si no tenemos una partial para cada item.
Nos acostumbramos tanto a las propiedades con
Podemos usar un
Pero yo prefiero quitar el
Switch expressions
Las switch expressions son mi característica favorita de C# 8. Ayudan a asignar valores rápidamente y las uso mucho para renderizar la interfaz gráfica.
Supongamos una Partial View que muestra el nombre de una empresa, consultor o institución, y un botón de color distinto para cada caso.
@model MyViewModel
@{
var (title, color) = Model.RoleType switch
{
RoleType.Company => ("Empresa", "info"),
RoleType.Institution => ("Institución", "primary"),
RoleType.Mentor => ("Consultor", "warning"),
_ => ("?", "danger")
};
}
<h3>
@Model.Name
</h3>
<button class="btn btn-@color">
@title
</button>
También funciona con métodos, si no tenemos una partial para cada item.
@model MenuViewModel
@{
string GetLinkIcon (string linkPage) => linkPage switch
{
MenuViewModel.PageIndex => "fe fe-home",
MenuViewModel.PageTools => "fe fe-box",
MenuViewModel.PagePrograms => "fe fe-arrow-up-right",
MenuViewModel.PageConnections => "fe fe-users",
MenuViewModel.PageRequests => "fe fe-bell",
_ => ""
};
string GetLinkCls (string linkPage) => linkPage == Model.Current ? "active" : "";
}
<ul class="nav flex-column d-none d-md-block">
@foreach (var p in Model.Pages)
{
<li class="nav-item @GetLinkCls(p)">
<a class="nav-link" asp-action="@p">
<span class="@GetLinkIcon(p)"></span>
</a>
</li>
}
</ul>
Propiedades de sólo lectura
Nos acostumbramos tanto a las propiedades con
get
y set
públicos, que las escribimos de forma automática y se nos olvida que las clases son el primer filtro para evitar errores en capas inferiores.Podemos usar un
set
privado si la propiedad es de sólo lectura.public string Name { get; private set; }
Pero yo prefiero quitar el
set
para que se asigne únicamente desde el constructor y forzar la regla de negocio.public string Name { get; }
public MyClass(string name)
{
Name = name;
}
Comentarios
Publicar un comentario