Devo modificare la proprietà Capacity
della variabile dinamica di tipo List<*DynamicType*>
. Il problema è che i rendimenti Activator
object
variabile -casted se il tipo di variabile non è specificato, invece di una corretta List<*DynamicType*>
e il meglio che posso fare è di gettarlo ai IList
:Trasmissione a un elenco generico di variabili di tipo dinamico
DynamicTypeBuilder builder = new DynamicTypeBuilder() { ... };
Type dataType = builder.GenerateType(...);
Type listDataType = typeof(List<>).MakeGenericType(dataType);
IList list = (IList)Activator.CreateInstance(listDataType);
Dopo qualche ricerca ho trovato solo un trucco:
dynamic dynamicList = list;
dynamicList.Capacity = dataRowsCount;
Anche se questo sarebbe accettabile nel mio caso mi chiedo se c'è un altro modo per farlo.
Hai dimenticato il costruttore. Dato che ho bisogno di impostare solo quella proprietà, farlo in questo modo è davvero più semplice. E mi piace anche il tuo suggerimento di utilizzare un metodo generico per "trasmettere" l'oggetto IList, molto bello. –
BTW, anche se potrei fare qualcosa di sbagliato, ma assegnare il risultato di 'Activator.CreateInstance()' alla variabile 'generic' nel mio caso non funzionerà, perché' list.Add (* DataType creato dinamicamente oggetto *) ' ha come risultato un'eccezione e con '' list' di pre-casting su 'IList' funziona. –
@Diman sicuro, quindi lanciato su 'IList'. Nell'esempio non l'ho fatto, semplicemente perché stavo illustrando il minimo per eseguire le operazioni * nell'esempio *, e l'esempio non ha 'Aggiungi (...)' –