generics - una - recorrer list c#
Uso de listas genéricas en componentes reparados (1)
Estoy tratando de usar una Lista genérica como propiedad en una clase ServicedComponent
...
public class MyCOM : ServicedComponent {
public enum MyEnumType {
Value1, Value2, Value3
}
public List<MyEnumType> MyList { private set; get; }
public MyCOM()
{
MyList = new List<MyEnumType>();
}
}
El código se compila sin errores pero cuando trato de usar la propiedad MyList
en el objeto com de una clase diferente, no se agregan valores a la lista. Google "me dijo" que no puedo usar Generics en los componentes, pero aún no he encontrado una buena explicación de por qué y una buena solución al problema.
¿Alguien me puede ayudar?
Desde MSDN:
Interoperar con tipos genéricos
El modelo COM no admite el concepto de tipos genéricos. En consecuencia, los tipos genéricos no se pueden usar directamente para la interoperabilidad COM.
La respuesta por la cual los genéricos no son compatibles es muy simple, los genéricos son tipos que se construyen en tiempo de ejecución, y debido a esto no hay una declaración de interfaz estática para el tipo construido al que COM puede hacer referencia. En su caso, List <MyEnumType> no existe como un tipo Hasta que CLR lo construye, por lo que COM no puede hacer referencia a él con un identificador (GUID).
Aquí es de donde proviene la solución, si sus tipos genéricos implementan una interfaz no genérica, entonces pueden ser utilizados para la interoperabilidad utilizando la interfaz no genérica.