В главном случае попробуйте изменить вызов GetList на:
Task.Run(() => bs.GetList());
Технически вы можете объединить Reflection и Linq в нечто подобное:
Object obj = ...
// All Empty (false or null) public properties of either string or bool type
PropertyInfo[] emptyProps = obj
.GetType()
.GetProperties(BindingFlags.Instance | BindingFlags.Public)
.Where(prop => prop.CanRead) // you may want to check prop.CanWrite as well
.Where(prop => prop.PropertyType == typeof(bool) ||
prop.PropertyType == typeof(string))
.Where(prop => object.Equals(prop.GetValue(obj),
prop.PropertyType.IsValueType
? Activator.CreateInstance(prop.PropertyType)
: null))
.ToArray();
Однако I сомневается , если вы должны это сделать: некоторые свойства не должны сохраняться :
// Should be saved
public string FirstName {...}
// Should be saved
public string SecondName {...}
// Should NOT be saved
public string Name {get {return $"{FirstName} {SecondName}";}}
Вы можете иметь разработанные критерии , какие данные следует сохранить, например в случае FirstName
вы можете проверить (по крайней мере!) [/ g8]
// FirstName must be not null, not empty and not blank
bool shouldSave = !string.IsNullOrWhiteSpace(FirstName);
Вот почему я предлагаю реализовать [класс g5] пользовательского свойства / method в классе:
public class MyClass {
...
// virtual: you may want to add some properties in a derived class
public virtual bool IsEmpty {
get {
return string.IsNullOrWhiteSpace(FirstName) &&
string.IsNullOrWhiteSpace(SecondName) &&
...
}
}
}
вы можете проверить его с помощью простой проверки
obj == null || obj == String.Empty
Это проверит как нулевое, так и пустое условие
Спасибо
String.IsNullOrEmpty(your_string)
.
– Sebastian Hofmann
13 July 2018 в 08:27