Я пытаюсь создать метод, который будет проходить через список универсальных объектов и заменять все их свойства типа 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 и рефлексию и все здесь ... но если у вас есть отличные альтернативные идеи, пожалуйста, дайте мне знать потому что я хочу учиться!