我有一个只有这样的字符串成员的类:
public class MyClass
{
public string MyProp1 { get; set; }
public string MyProp2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个实例:
Var myClass = new MyClass();
Run Code Online (Sandbox Code Playgroud)
稍后在代码中,我想知道所有成员(MyProp1和MyProp2)是否为空或空.我知道我可以使用if当然但在我的实际代码中有比2更多的属性.
有没有办法做到这一点 ?
谢谢,
Pon*_*dum 10
为您的属性使用基于字典的存储可能是最简单的方法:
public class MyClass
{
private IDictionary<String, String> _store;
public MyClass()
{
_store = new Dictionary<String, String>();
}
public string MyProp1 {
get { return GetOrDefault("MyProp1"); }
set { _store["MyProp1"] = value; }
}
public string MyProp2 {
get { return GetOrDefault("MyProp2"); }
set { _store["MyProp2"] = value; }
}
public Boolean HasData()
{
return _store.Any(x => !String.IsNullOrWhiteSpace(x.Value));
}
public Boolean IsEmpty()
{
return _store.All(x => String.IsNullOrWhiteSpace(x.Value));
}
private String GetOrDefault(String propertyName)
{
if (_store.ContainsKey(propertyName))
{
return _store[propertyName];
}
return String.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
执行此操作的另一种方法是将其与默认实例进行比较:
public class MyClass
{
public string MyProp1 { get; set; }
public string MyProp2 { get; set; }
public static readonly MyClass Empty = new MyClass();
public Boolean HasData()
{
return !Empty.Equals(this);
}
public Boolean IsEmpty()
{
return Empty.Equals(this);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以尝试使用反射来检查属性。您应该确认所有属性都是公共的,类型是字符串。这是代码。
public static bool IsNullOrEmpty(MyClass prop)
{
bool result = true;
PropertyInfo[] ps = prop.GetType().GetProperties();
foreach (PropertyInfo pi in ps)
{
string value = pi.GetValue(prop, null).ToString();
if (string.IsNullOrEmpty(value))
{
result = false;
break;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)