Potrzebuję zmienić właściwość Capacity
zmiennej dynamicznej typu List<*DynamicType*>
. Problemem jest to, że Activator
powraca object
-casted jeśli zmienna zmienna typu nie jest określony, zamiast prawidłowego List<*DynamicType*>
i najlepsze, co mogę zrobić, to oddać go do IList
:Przesyłanie do ogólnej listy zmiennych typu dynamicznego
DynamicTypeBuilder builder = new DynamicTypeBuilder() { ... };
Type dataType = builder.GenerateType(...);
Type listDataType = typeof(List<>).MakeGenericType(dataType);
IList list = (IList)Activator.CreateInstance(listDataType);
Po poszukiwaniach znalazłem tylko jeden Hack:
dynamic dynamicList = list;
dynamicList.Capacity = dataRowsCount;
Chociaż byłoby to do przyjęcia w moim przypadku, zastanawiam się, czy jest inny sposób, aby to zrobić.
Zapomniałem o tym konstruktorze. Ponieważ muszę ustawić tylko tę właściwość, robienie tego w ten sposób jest naprawdę prostsze. I podoba mi się również twoja sugestia, aby użyć ogólnej metody do "rzucania" obiektu IList, bardzo miłego. –
BTW, choć być może robię coś nie tak, ale przypisanie wyniku 'Activator.CreateInstance()' do zmiennej 'generic' w moim przypadku nie zadziała, ponieważ' list.Add (* Dynamicznie utworzony obiekt dataType *) ' powoduje wyjątek, a z pre-casting 'list' na' IList' działa. –
@Dmitry pewnie, a następnie odrzuć do "IList". Nie zrobiłem tego w tym przykładzie, po prostu dlatego, że ilustrowałem minimum, aby wykonać operacje * w przykładzie *, a przykład nie ma 'Dodaj (...)' –