Es muy común un escenario donde tenemos que mapear de una clase a otra, y en .NET podemos utilizar múltiples métodos, como puede ser casting o creando manualmente mappers para cada tipo.
En este post vamos a ver otra forma de conseguir nuestro objetivo final, convertir de un tipo a otro. Pero no entraremos en una discusión sobre qué elemento es mejor o peor.
1 - Palabra clave implicit en C#
Como hemos mencionado, con un operador implícito podemos convertir de un tipo a otro. Para ello debemos hacer un método estático.
- Nota: Para este ejemplo vamos a trabajar con el código que podemos encontrar en la librería de Railway Oriented programming en GitHub.
public struct Result<T>
{
public static implicit operator Result<T>(T value) => new Result<T>(value, HttpStatusCode.Accepted);
}
A primera vista parece un método normal, que simplemente hace un mapeo, pero no lo es, y eso es debido a que no hay que instanciarlo o llamarlo cada vez que queremos hacer dicho mapeo, sino que se configura automáticamente en tiempo de compilación.
2 - Ejemplo práctico
En el código, trabajamos con el tipo Result<T>
en la cual hacemos uso del operador implícito. Desde nuestro tipo genérico T
a Result<T>
.
Esto qué quiere decir?
Significa que en nuestro código podemos convertir un valor T
en Result<T>
directamente asignando el valor:
int originalValue = 1;
Result<int> result = originalValue;
O el caso más común devolviendo como resultado de un método:
public Result<int> EjemploImplicitOperator()
{
//Resto del código
int simulacionResultado = 1;
return simulacionResultado;
}
En ambos casos estamos convirtiendo un objeto int
en Result<int>
sin tener que crear o invocar un mapper o un casting, ya que se invoca de manera automática.
Conclusión
En este post hemos visto cómo utilizar el operador implícito el cual es muy común ver en proyectos open source pero no en nuestro día a día laboral.