Почему вы хотите конвертировать значение?Объект уже имеет тип Address
, а метод set объявлен как
public void SetValue (object obj, object value);
, т. Е. Он принимает переменную типа object
.
Проблема возникает при вызове GenerateDataSample<T>()
, поскольку T
определяется во время компиляции, а тип времени компиляции instanceIntermediate
равен object
, поэтому GenerateDataSample
всегда будет пытаться создать объект типа System.Object
для свойств.Не делайте GenerateDataSample
универсальным.
Кроме того, вам на самом деле не нужно передавать экземпляр, а только тип GenerateDataSample
.
private static object GenerateDataSample(Type typeToWork)
{
object tipoInstance = Activator.CreateInstance(typeToWork);
foreach (PropertyInfo classProperty in typeToWork.GetProperties()) {
object propertyVal;
if (classProperty.PropertyType == typeof(string)) {
propertyVal = RandomString(10, false);
} else {
propertyVal = GenerateDataSample(classProperty.PropertyType);
}
classProperty.SetValue(tipoInstance, propertyVal);
}
return tipoInstance;
}
Вы также можете создатьперегруженная универсальная версия:
private static T GenerateDataSample<T>()
{
return (T)GenerateDataSample(typeof(T));
}
Затем вы можете создать пример данных с помощью:
Destinatary destinataryTest = GenerateDataSample<Destinatary>();