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
____________________________________________________________________________________
¡Viví la mejor experiencia en la web!
Descargá gratis el nuevo Internet Explorer 8
http://downloads.yahoo.com/ieak8/?l=ar