Se me ocurre algo así :

interface IExcelVariablePosition {
     string getValue();
}

class Cartera : IExcelVariablePosition {
     public getValue() {
         return "11";
    }
}

class Lanzamientos : IExcelVariablePosition {
     public getValue() {
         return "4";
    }
}

class Helper {
     public static IExcelVariablePosition GetInstance(string pTypeName)
        {
                Type type = System.Type.GetType(pTypeName);
                return (IExcelVariablePosition)
Activator.CreateInstance(type);
        }
}

La llamada para obtener el valor sería :

Helper.GetInstance(VariableEnum.ToString()).getValue();

La única desventaja que veo es que habría que crear una clase por cada
ExcelVariablePosition.




2009/8/4 Diego Jancic <[email protected]>

> Como solucion facil podes usar atributos en los items del enum, aunque
> es bastante intrusivo.
> Todo depende de donde se use VariableEnum, si es solo ahi o es una
> entidad del negocio (espero que no! ;-)
>
> Saludos
>
>
> 2009/8/4 Leandro Tuttini <[email protected]>:
> > hola,
> >
> > la verdad tengo una consulta basada en un codigo que implemente que no me
> > gusta para nada como quedo, pero no se me ocurre muy bien como
> optimizarlo.
> >
> > El codigo que tengo es el siguiente:
> >
> >     enum VariableEnum
> >     {
> >         Profolio = 1,
> >         Kits = 2,
> >         Facturación = 3,
> >         Lanzamientos = 4,
> >         AccionesEspeciales = 5,
> >         Compras = 7,
> >         Cartera12Meses = 8,
> >         CoberturaMeses = 9,
> >         CategorizacionOtros = 10,
> >         NivelEjecucionPortfolio = 12,
> >         Cartera = 13
> >     }
> >
> >
> >
> >     internal class ExcelVariablePosition
> >     {
> >         public string Cartera { get { return "11"; } }
> >         public string Cartera12Meses { get { return "12"; } }
> >         public string CoberturaMeses { get { return "13"; } }
> >         public string CategorizacionOtros { get { return "14"; } }
> >         public string NivelEjecucionPortfolio { get { return "15"; } }
> >         public string Profolio { get { return "18"; } }
> >         public string Lanzamientos { get { return "20"; } }
> >         public string Kits { get { return "22"; } }
> >         public string AccionesEspeciales { get { return "24"; } }
> >         public string Compras { get { return "26"; } }
> >         public string Facturación { get { return "30"; } }
> >
> >
> >         #region GetValueByType
> >
> >         public string GetValueByType(VariableEnum var)
> >         {
> >             string valor = "";
> >
> >             switch (var)
> >             {
> >                 case VariableEnum.Cartera:
> >                     valor = this.Cartera;
> >                     break;
> >                 case VariableEnum.Cartera12Meses:
> >                     valor = this.Cartera12Meses;
> >                     break;
> >                 case VariableEnum.CoberturaMeses:
> >                     valor = this.CoberturaMeses;
> >                     break;
> >                 case VariableEnum.CategorizacionOtros:
> >                     valor = this.CategorizacionOtros;
> >                     break;
> >                 case VariableEnum.NivelEjecucionPortfolio:
> >                     valor = this.NivelEjecucionPortfolio;
> >                     break;
> >                 case VariableEnum.Profolio:
> >                     valor = this.Profolio;
> >                     break;
> >                 case VariableEnum.Lanzamientos:
> >                     valor = this.Lanzamientos;
> >                     break;
> >                 case VariableEnum.Kits:
> >                     valor = this.Kits;
> >                     break;
> >                 case VariableEnum.AccionesEspeciales:
> >                     valor = this.AccionesEspeciales;
> >                     break;
> >                 case VariableEnum.Compras:
> >                     valor = this.Compras;
> >                     break;
> >                 case VariableEnum.Facturación:
> >                     valor = this.Facturación;
> >                     break;
> >             }
> >
> >             return valor;
> >         }
> >         #endregion
> >
> >     }
> >
> > como veran se trata de un enum, y segun este obtengo posiciones que luego
> > seran utilizadas como veran en Excel para ubicar cierto dato.
> >
> > Se puede recuperar tanto por enum, como por acceso a la propeidad
> > directamente.
> >
> > Basicamente la clase me resuelve posicionamiento en el excel, el
> > procesamiento se realiza en otro lado, utilizando la info de esta clase.
> >
> > la pregunta es se puede eliminar el switch gigante ?
> >
> > Si se que diran que las posiciones tan fijas en el codigo, porque no
> utilizo
> > un archivo de configuracion y las leo de ahi, lo habia pensado, pero no
> se
> > si vale la pena arma seccion en el config para algo que una vez terminado
> > nunca mas se movera de lugar en el excel, y si algo cambia compilar y
> hacer
> > un deploy de la dll cuenta nada.
> >
> > gracias
> > saludos
> >
> > ________________________________
> > Encontra las mejores recetas con Yahoo! Cocina.
> > http://ar.mujer.yahoo.com/cocina/
>

Responder a