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/