Я пытаюсь сделать метод, который будет проходить через список общих объектов и заменить все их свойства типа string, который либо является null, либо пустым с заменой.
Как хороший способ сделать это?
У меня есть такая... оболочка... пока:
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);
        }
    }
}
Итак, как мне найти все свойства типа:
-  Тип 
string -  Публичный 
get -  
Публичный
set?
 
Я сделал этот тестовый класс:
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; }
}
Не работает следующее:
var properties = typeof(TestSubject)
        .GetProperties(BindingFlags.Instance|BindingFlags.Public)
        .Where(ø => ø.CanRead && ø.CanWrite)
        .Where(ø => ø.PropertyType == typeof(string));
Если я распечатаю имя тех свойств, которые у меня есть, я получаю:
PublicPublic государственно-частное PrivatePublic
Другими словами, я получаю два свойства слишком много.
Примечание. Это, вероятно, можно было бы сделать лучше... используя вложенный foreach и отражение и все здесь... но если у вас есть какие-то отличные альтернативные идеи, пожалуйста, дайте мне знать, потому что я хочу учиться!