У меня проблема. Скажем, у меня есть общий класс, который может иметь общие свойства других классов и может даже иметь список других классов. Если у меня есть функция, какРекурсия на вложенных общих классах
public void Read<T>() where T: class, new()
{
// Create an instance of our generic class
var model = new T();
var properties = typeof(T).GetProperties();
// Loop through the objects properties
for(var property in properties) {
// Set our value
SetPropertyValue(property, model, "test");
}
}
private void SetPropertyValue(PropertyInfo property, object model, string value) {
// Set our property value
property.SetValue(model, value, null);
}
, что будет работать, если у меня был класс вроде этого:
public class Person
{
public string Name { get; set; }
}
и я применит Read метод, как это:
Read<Person>();
Но если моя модель была такой:
public class Person
{
public string Name { get; set; }
public Company Company { get; set; }
}
public class Company
{
public string Name { get; set; }
}
И я попытался вызвать метод . Прочтите метод еще раз, он потерпит неудачу из-за свойства, у которого есть собственный список свойств. Что было бы лучше, если бы оно пересекло их тоже. Есть ли способ сделать это?
Просто внесите универсальный вариант вашего метода чтения, в дополнение к универсальному. Из generic - вызов не общей версии, чтобы не повторять код слишком много. Затем, когда вы рекурсируете - просто вызовите не-общую версию с типом свойства. Не общие версии очень часто бывают хорошими. – Evk