Necesito cambiar la propiedad Capacity
de la variable dinámica del tipo List<*DynamicType*>
. El problema es que Activator
rendimientos variables object
-casted si el tipo de variable no se especifica en lugar de List<*DynamicType*>
adecuado y lo mejor que puedo hacer es echarlo a los IList
:Casting a una lista genérica de variables de tipo dinámico
DynamicTypeBuilder builder = new DynamicTypeBuilder() { ... };
Type dataType = builder.GenerateType(...);
Type listDataType = typeof(List<>).MakeGenericType(dataType);
IList list = (IList)Activator.CreateInstance(listDataType);
Después de buscar encontré un solo truco:
dynamic dynamicList = list;
dynamicList.Capacity = dataRowsCount;
Aunque esto sería aceptable en mi caso, me pregunto si hay otra forma de hacerlo.
Olvidé ese constructor. Como necesito establecer solo esa propiedad, hacerlo de esta manera es realmente más simple. Y también me gusta su sugerencia de usar un método genérico para "lanzar" el objeto IList, muy agradable. –
Por cierto, aunque puedo estar haciendo algo mal, pero asignar el resultado de la variable 'Activator.CreateInstance()' a 'generic' en mi caso no funcionará, porque' list.Add (* Creado dinámicamente dataType object *) ' da como resultado una excepción, y con la 'lista' de prefacturación a' IList' funciona. –
@Dmitry seguro, luego lanzar a 'IList'. No hice eso en el ejemplo, simplemente porque estaba ilustrando el mínimo para realizar las operaciones * en el ejemplo *, y el ejemplo no tiene 'Agregar (...)' –