Динамично добавляющие объекты к Списку <T> посредством отражения

Если Вы хотите быть в состоянии установить свою переменную флага и иметь цикл выполнения, сразу замечают, просто используют -[NSRunLoop performSelector:target:argument:order:modes: , чтобы попросить, чтобы цикл выполнения вызвал метод, который устанавливает флаг на ложь. Это заставит Ваш цикл выполнения сразу вращаться, метод, который будет вызван, и затем флаг будет проверен.

17
задан Flimzy 6 June 2018 в 12:45
поделиться

3 ответа

I would say you should cast down to System.Collections.IList and directly call the Add method. Pros: simple, no ugly reflection. Cons: causes boxing for Lists containing value types.

21
ответ дан 30 November 2019 в 11:22
поделиться

Вам нужно позвонить type.MakeGenericType (type.GetGenericArguments ()) , который вернет правильный закрытый универсальный тип. Затем вам нужно будет рефлексивно вызвать метод Add . Код должен выглядеть примерно так:

   Type listType = type.MakeGenericType(type.GetGenericArguments());
   MethodInfo addMethod = listType.GetMethod("Add");
   addMethod.Invoke(instance, new object[] { ... });

Я не уверен, что вы бы использовали в качестве экземпляра , но это реальный объект, для которого будет вызван метод.

Лучший вопрос к спросите, почему вы пытаетесь это сделать? .NET Framework уже включает сериализаторы, которые знают, как выполнять всю эту работу. Если вы можете, вам следует использовать один из них, вместо того, чтобы пытаться «свернуть свой собственный».

1
ответ дан 30 November 2019 в 11:22
поделиться

Это должно сработать, если я действительно чего-то не упустил.

Вне цикла

var add = type.GetMethod("Add");

Внутри цикла

add.Invoke(list, new[] { item });
19
ответ дан 30 November 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: