Установка всех параметров нулевого объекта в string.empty

У меня есть объект, который содержит строки и другие объекты, которые содержат строки, что мне нужно сделать, это убедиться, что объект и любые дочерние объекты имеют пустую строку, а не нулевое значение, пока это работает нормально:

foreach (PropertyInfo prop in contact.GetType().GetProperties())
{
    if(prop.GetValue(contact, null) == null)
    {
        prop.SetValue(contact, string.empty);
    }
}

проблема в том, что это работает только для строк объектов, а не для строк подобъектов. Есть ли способ также перебрать все подчиненные объекты и установить их строки в string.Empty если найден null?

Вот пример объекта "контакт":

new contact 
{
  a = "",
  b = "",
  c = ""
  new contact_sub1 
  {
     1 = "",
     2 = "",
     3 = ""
  },
  d = ""
}

В основном мне также нужно проверить в contact_sub1 для нулей и замените значение пустым string,

1 ответ

Вы можете изменить свой текущий код, чтобы получить все подчиненные объекты, а затем выполнить ту же проверку свойств нулевой строки.

public void SetNullPropertiesToEmptyString(object root) {
    var queue = new Queue<object>();
    queue.Enqueue(root);
    while (queue.Count > 0) {
        var current = queue.Dequeue();
        foreach (var property in current.GetType().GetProperties()) {
            var propertyType = property.PropertyType;
            var value = property.GetValue(current, null);
            if (propertyType == typeof(string) && value == null) {
                property.SetValue(current, string.Empty);
            } else if (propertyType.IsClass && value != null && value != current && !queue.Contains(value)) {
                queue.Enqueue(value);
            }
        }
    }
}
Другие вопросы по тегам