Если вы хотите иметь возможность создавать экземпляры произвольных объектов с определенными значениями, вы можете проверить одну вещь - существует ли TypeConverter, который поддерживает преобразование экземпляра (со значением, которое вы хотите сопоставить) в InstanceDescriptor .Я не совсем уверен, что вы делаете (ваш пример предполагает, что вы пытаетесь создать экземпляры различных объектов по умолчанию), но я подумал, что упомяну это, если это уместно.Я использую это в коде Emit для передачи произвольных постоянных значений в стек через IL.Вот фрагмент кода, который получает InstanceDescriptor:
var converter = TypeDescriptor.GetConverter(value);
if (converter.CanConvertTo(typeof (InstanceDescriptor)))
{
var desc = (InstanceDescriptor) converter.ConvertTo(value, typeof (InstanceDescriptor));
}
Дескриптор определяет средство конструирования экземпляра, которое может вызывать конструктор, вызывать статический метод, обращаться к статическому свойству или обращаться к статическому полю.Он также указывает, полностью ли устанавливает конструкция значение типа в соответствии с вашим исходным экземпляром;в противном случае вам потребуется выполнить дополнительное отражение и установку свойств.
Это механизм, который используется конструктором WinForms при создании кода для элементов управления в форме, поэтому он поддерживается дляраспространенные типы, которые отображаются как свойства элементов управления, доступные из конструктора.