Je suis en train de faire une méthode qui vous permettra de parcourir une liste de génériques d'objets et de remplacer toutes leurs propriétés de type string
soit null
vide ou avec un remplacement.
Comment est une bonne façon de le faire?
J'ai ce genre de... coque... pour l'instant:
public static void ReplaceEmptyStrings<T>(List<T> list, string replacement)
{
var properties = typeof(T).GetProperties( -- What BindingFlags? -- );
foreach(var p in properties)
{
foreach(var item in list)
{
if(string.IsNullOrEmpty((string) p.GetValue(item, null)))
p.SetValue(item, replacement, null);
}
}
}
Alors, comment puis-je trouver toutes les propriétés d'un type qui sont:
- De type
string
- A public
get
-
A public
set
?
J'ai fait cette classe de test:
class TestSubject
{
public string Public;
private string Private;
public string PublicPublic { get; set; }
public string PublicPrivate { get; private set; }
public string PrivatePublic { private get; set; }
private string PrivatePrivate { get; set; }
}
Le code suivant ne fonctionne pas:
var properties = typeof(TestSubject)
.GetProperties(BindingFlags.Instance|BindingFlags.Public)
.Where(ø => ø.CanRead && ø.CanWrite)
.Where(ø => ø.PropertyType == typeof(string));
Si j'ai imprimer le Nom de ces propriétés, j'y arrive, j'obtiens:
PublicPublic Public-privé PrivatePublic
En d'autres termes, je reçois deux propriétés de trop.
Remarque: Cela pourrait être fait dans une meilleure façon... en utilisant foreach imbriquée et la réflexion, et tous ici... mais si vous avez une excellente alternative idées, s'il vous plaît laissez-moi savoir parce que je veux apprendre!