Hola, gracias a todos por las respuestas, fueron de utilidad. Modifique la implementacion quedando de esta forma:
private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, ButtonFormatInfo format) { ApplyFormat<ButtonFormatInfo>(sheet, pivotTable, (ButtonFormatInfo)format); } private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, FieldFormatInfo format) { ApplyFormat<FieldFormatInfo>(sheet, pivotTable, (FieldFormatInfo)format); } private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, OriginFormatInfo format) { ApplyFormat<OriginFormatInfo>(sheet, pivotTable, (OriginFormatInfo)format); } private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, BlankFormatInfo format) { ApplyFormat<BlankFormatInfo>(sheet, pivotTable, (BlankFormatInfo)format); } private void ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable pivotTable, T format) where T : FormatInfo { } Para utilizarlo hago lo siguiente: foreach (FormatInfo format in pivotTableInfo.Format) ApplyFormat(sheet, pivotTable, format); Y la verdad quedo bastante bien, por supuesto agregue todo en una #region y quedo lindo. Al menos me libre del interminable if. gracias --- El jue 7-may-09, Daniel Calvin <daniel.cal...@gmail.com> escribió: De: Daniel Calvin <daniel.cal...@gmail.com> Asunto: [puntonet] Generics invocacion generica (utilizando typeof) Para: puntonet@mug.org.ar Fecha: jueves, 7 de mayo de 2009, 11:59 am Hola Leandro Tal vez me equivoque, pero no me parace una buena forma de usar generics. Te doy mi opinion hacer: if (format is Mapping.PivotTableInfo.ButtonFormatInfo) ApplyFormat<ButtonFormatInfo>(sheet, pivotTable, (ButtonFormatInfo)format); no es una buena práctica Se me ocurren otras opciones: en vez de : private void ApplyFormat<T>(Office.Worksheet sheet, Office.PivotTable pivotTable, T format) where T : FormatInfo { } hacer: private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, FieldFormatInfo format) { } private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, ButtonFormatInfo format) { } private void ApplyFormat(Office.Worksheet sheet, Office.PivotTable pivotTable, FormatInfo format) { } Tener una firma por cada posible FormatInfo y uno que reciba el tipo base para los que no requieren particularidades. Me parece lo mas sano. Yo al menos no usaría generics para esto o al menos de esa manera. En la práctica preguntar por un type es comprar problemas.... Saludos Daniel Calvin El 7 de mayo de 2009 10:55, Leandro Tuttini <ltuttini_lis...@yahoo.com.ar> 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/ -- Daniel A. Calvin Cooperator Team Member http://www.cooperator.com.ar Microsoft Certified Professional ____________________________________________________________________________________ ¡Viví la mejor experiencia en la web! Descargá gratis el nuevo Internet Explorer 8 http://downloads.yahoo.com/ieak8/?l=ar