Cómo escribir código HasFlag legible en C# minimizando la sobrecarga en tiempo de ejecución
(github.com/KBluePurple)Contexto de desarrollo
Este paquete fue creado para evitar fácilmente que se genere basura por Boxing cada vez que, al desarrollar juegos en Unity o al usar C#, se utiliza HasFlag del Enum base.
Cómo funciona
Usando un Source Generator, durante el tiempo de compilación busca entre el código las declaraciones de enum con [Flag] y genera automáticamente un método de extensión personalizado HasFlagNonAlloc.
Funcionalidades
Permite escribir código HasFlag de forma legible con una sobrecarga en tiempo de ejecución cercana a cero.
var currentState = PlayerState.Idle | PlayerState.Walking;
// HasFlag tradicional (ocurre Boxing)
if (currentState.HasFlag(PlayerState.Idle))
{
// ...
}
// Implementación de verificación HasFlag para evitar Boxing
if ((currentState & PlayerState.Idle) == PlayerState.Idle)
{
// ...
}
// Después de instalar NonAllocFlagGenerator
if (currentState.HasFlagNonAlloc(PlayerState.Idle))
{
// ...
}
Es mi primer proyecto open source hecho en serio, así que todavía tiene muchas carencias, pero me animé a compartirlo.
Espero que sea útil cuando escriban código sensible al rendimiento.
¡Todo feedback es bienvenido!
Aún no hay comentarios.