Есть несколько способов. Вы можете выбрать тот, который вы считаете наиболее подходящим для вас.
Продолжайте использовать отражение
PropertyInfo myNameProperty = listType.GetProperty("MyName");
myNameProperty.SetValue(valueToSet, field.Name);
Использование dynamic
:
dynamic valueToSet= Activator.CreateInstance(listType);
...
valueToSet.MyName = field.Name;
Приведение к суперклассу
И, очевидно, как вы сказали в своих комментариях, вы можете объявить MyName
в MyBaseClass
. Это необычная вещь, которую можно сделать, но хорошо ... Учитывая, что MyName
объявлено в MyBaseClass
, вы можете привести valueToSet
к MyBaseClass
:
((MyBaseClass)valueToSet).MyName = field.Name;