Попытка добавить объект класса в список с использованием отражения, но при вызове метода Add с моим объектом класса в качестве параметра я получаю «Object не соответствует целевому типу»Списки рефлексии C#: объект не соответствует целевому типу
Вот фрагмент кода в концерне (можно предположить classString = "Processor"
сейчас)
PC fetched = new PC();
// Get the appropriate computer field to write to
FieldInfo field = fetched.GetType().GetField(classString);
// Prepare a container by making a new instance of the reffered class
// "CoreView" is the namespace of the program.
object classContainer = Activator.CreateInstance(Type.GetType("CoreView." + classString));
/*
classContainer population code
*/
// This is where I get the error. I know that classContainer is definitely
// the correct type for the list it's being added to at this point.
field.FieldType.GetMethod("Add").Invoke(fetched, new[] {classContainer});
Тогда это часть класса приведенный выше код добавления classContainers к:
public class PC
{
public List<Processor> Processor = new List<Processor>();
public List<Motherboard> Motherboard = new List<Motherboard>();
// Etc...
}
Это сделал трюк! Удивительно, как каждый раз, когда я показываю публичное поле, кто-то жалуется = P. Не волнуйтесь, они станут собственностью, когда я буду ближе к выпуску программы. Я все еще не полностью понимаю, почему они должны быть свойствами. – CJxD
@CJxD: См. Http://csharpindepth.com/Articles/Chapter8/PropertiesMatter.aspx для некоторых аргументов. Возможно, вы даже не хотите показывать их непосредственно в виде списков - вы можете просто выставить определенные операции, такие как «AddProcessor», «AddMotherboard» и т. Д. Это зависит от того, какой уровень инкапсуляции вы хотите достичь. –
Получите инструмент анализа кода и включите его в свой код. Он будет вопить в муках. От членов с теми же именами, что и типы, не используя свойства, выставляя конкретные типы ... Вы не делаете себе ничего подобного с помощью такого ярлыка. public List Процессоры {get; set;} (или, тем не менее, частный набор), вряд ли будет какой-то огромной необъяснимой нагрузкой. –