Hola Leandro:

Estaría buenísimo que funcione con el typeof pero por lo visto no anda.

Y si hacés así:

ApplyFormatNoGeneric(Office.Worksheet sheet, Office.PivotTable pivotTable, ButtonFormatInfo format) ApplyFormatNoGeneric(Office.Worksheet sheet, Office.PivotTable pivotTable, FieldFormatInfo format)
....(uno por cada subclase)

( eso sí, ponele otro nombre que no sea tan feo ;-D )

Y después adentro de cada uno de estos métodos llamás a:

ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable pivotTable, T format) con el T que corresponda...

con esto (ojo no lo probé), no escribís menos pero por lo menos te sacás de encima el if (y extender a mas tipos FormatInfo va a ser más fácil)

Saludos,

Quique


Leandro Tuttini escribió:
Hola,

Les planteo la siguiente situacion.

Tengo las siguientes clases:

public abstract class FormatInfo
{
}

public class FieldFormatInfo : FormatInfo
{
}

public class ButtonFormatInfo : FormatInfo
{
}

public class OriginFormatInfo : FormatInfo
{
}

public class BlankFormatInfo : FormatInfo
{
}


Y la siguiente implementacion:


foreach (FormatInfo format in pivotTableInfo.Format)
{
    //ApplyFormat<typeof(format)>(sheet, pivotTable, format);

    if (format is Mapping.PivotTableInfo.ButtonFormatInfo)
ApplyFormat<ButtonFormatInfo>(sheet, pivotTable, (ButtonFormatInfo)format);
    else if (format is Mapping.PivotTableInfo.FieldFormatInfo)
ApplyFormat<FieldFormatInfo>(sheet, pivotTable, (FieldFormatInfo)format);
    else if (format is Mapping.PivotTableInfo.OriginFormatInfo)
ApplyFormat<OriginFormatInfo>(sheet, pivotTable, (OriginFormatInfo)format);
    else if (format is Mapping.PivotTableInfo.BlankFormatInfo)
ApplyFormat<BlankFormatInfo>(sheet, pivotTable, (BlankFormatInfo)format);

}


pivotTableInfo.Format, es una propiedad del tipo:

public List<FormatInfo> Format { get; set; }


Y ApplyFormat() es un metodo:

private void ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable pivotTable, T format) where T : FormatInfo
{
}



Como veran funciona sin problema, pero la verdad no queda nada agradable a la vista, en realidad yo reduje un poco el ejemplo, hay unos 6 format mas que hacen el if
bastante feo.

por eso la cuestion es porque no puedo hacer algo asi:

foreach (FormatInfo format in pivotTableInfo.Format)
{
    ApplyFormat<typeof(format)>(sheet, pivotTable, format);
}

O sea la aplicacion del template seria dinamica.

Se puede lograr algo parecido a esto ?, o la unica forma es con los if descubriendo el tipo.

Saludos


------------------------------------------------------------------------

Yahoo! Cocina
Recetas prácticas y comida saludable
Visitá http://ar.mujer.yahoo.com/cocina/


Reply via email to