Не совсем уверен, чем использование встроенных типов отличается от созданных пользователем типов. Ваша большая проблема - создание экземпляров типов, которые не имеют конструкторов без параметров.
Что бы вы ни делали, вам придется преобразовывать их в массивы объектов, чтобы вы могли передать их MethodInfo.Invoke
, поэтому в какой-то момент вам нужно будет сделать Activator.CreateInstance
.
Если вы предоставляете пользовательский интерфейс, в котором пользователь может вводить данные в поля, а затем нажимать кнопку для вызова метода, вам лучше всего использовать Reflection для поиска статических методов TryParse / Parse для типа и вызова их в Для проверки / анализа ввода.
Вот фрагмент кода, который будет работать неявно для большинства системных типов, которые можно преобразовать из строки:
var parseMethod = typeof(int).GetMethods().FirstOrDefault(
m => m.IsStatic &&
m.Name == "TryParse" &&
m.GetParameters().Length == 2 &&
m.GetParameters()[0].ParameterType == typeof(string) &&
m.GetParameters()[1].IsOut);
if(parseMethod != null) {
bool result = (bool)parseMethod.Invoke(null, new object[]{"45", null});
//result == true
result = (bool)parseMethod.Invoke(null, new object[] { "blah", null });
//result = false
}