2017-05-24 1 views
1

J'ai un objet qui contient des chaînes et d'autres objets contenant des chaînes, ce que je dois faire, c'est m'assurer que l'objet et les sous-objets ont une chaîne vide et non une valeur nulle , jusqu'à présent cela fonctionne bien:Définition de tous les paramètres d'objet null sur string.empty

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

le problème est cela ne fonctionne que pour les chaînes d'objets et non les chaînes sous-objets. Y a-t-il un moyen de faire une boucle sur tous les sous-objets et de définir leurs chaînes sur string.Empty s'il s'avère être null?

Voici un exemple de l'objet « contact »:

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

Fondamentalement, je besoin aussi de vérifier dans contact_sub1 pour remplacer les valeurs NULL et la valeur avec un string vide.

+2

approche même mais récursive –

+2

Utilisez récursivité pour traiter les « sous-objets » aussi bien. – Abion47

Répondre

1

Vous pouvez modifier votre code actuel pour obtenir tous les sous-objets, puis effectuer la même vérification pour les propriétés de chaîne nulle.

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); 
      } 
     } 
    } 
}