Estoy tratando de escribir clases que manejen diferentes tipos de números. Yo sé que C# (y .Net en general, creo) no tiene interfaz INumber
, así que no puedo usar algo como lo siguiente:¿Cómo puedo escribir una sola clase para compilar varias veces con diferentes tipos de números?
public class Adder<T> where T:INumber
{
public T Add(T a, T b)
{
return a + b;
}
}
Eso está bien, sin embargo, porque me gustaría evitar el boxeo/unboxing de cada uno de mis números. Podría, sin embargo, utilizar la compilación condicional para cada tipo Quiero apoyar:
#if FLOAT
public class AdderF
{
public float Add(float a, float b)
#else
public class Adder
{
public int Add(int a, int b)
#endif
{
return a + b;
}
}
Esto significa que voy a necesitar para compilar una diferente Library.dll
y LibraryF.dll
, sin embargo. ¿Hay alguna solución más elegante para esto?
Obviamente, en mi ejemplo, simplemente puedo escribir el código dos veces. Me gustaría utilizar este proceso, sin embargo, para crear estructuras de datos complicadas grandes con una versión entera y una versión de coma flotante, por lo que no quiero la posibilidad de errores de copiar y pegar al actualizar mi estructura. Tampoco quiero que la pérdida de velocidad abarque la estructura de coma flotante en un envoltorio integral, y que convierta innecesariamente todas las entradas al tipo de datos más indulgente.
Como dije, estoy tratando de sacar más rendimiento de mis estructuras de datos, y no lo hago Creo que usar 'decimal's en todas partes cuando podría estar usando' int's en su lugar sería efectivo para eso. T4 es definitivamente una tecnología genial que no conocía, ¡y sin dudas lo investigaré! – dlras2