我试图弄清楚如何在该类的属性上调用类方法。这是我的两个班级:
public class MrBase
{
public int? Id { get; set; }
public String Description { get; set; }
public int? DisplayOrder { get; set; }
public String NullIfEmpty()
{
if (this.ToString().Trim().Equals(String.Empty))
return null;
return this.ToString().Trim();
}
}
public class MrResult : MrBase
{
public String Owner { get; set; }
public String Status { get; set; }
public MrResult() {}
}
现在,我希望能够在这些类的任何属性上调用NullIfEmpty方法......就像这样:
MrResult r = new MrResult();
r.Description = "";
r.Description.NullIfEmpty();
r.Owner = "Eric";
r.Owner.NullIfEmpty();
感谢。
埃里克
答案 0 :(得分:3)
如果您希望此代码特定于您的模型,那么您可以通过稍微修改NullIfEmpty
方法将其构建到您的设置器中,例如
private String _owner;
public String Owner
{
get { return _owner; }
set { _owner = NullIfEmpty(value); }
}
...
public String NullIfEmpty(string str)
{
return str == String.Empty ? null : str;
}
答案 1 :(得分:2)
您应该为string
编写扩展方法:
public static class StringExtensions
{
public static string NullIfEmpty(this string theString)
{
if (string.IsNullOrEmpty(theString))
{
return null;
}
return theString;
}
}
用法:
string modifiedString = r.Description.NullIfEmpty();
如果您的主要目标是自动“修改”类的每个string
属性,则可以使用反射来实现此目的。这是一个基本的例子:
private static void Main(string[] args)
{
MrResult r = new MrResult
{
Owner = string.Empty,
Description = string.Empty
};
foreach (var property in r.GetType().GetProperties())
{
if (property.PropertyType == typeof(string) && property.CanWrite)
{
string propertyValueAsString = (string)property.GetValue(r, null);
property.SetValue(r, propertyValueAsString.NullIfEmpty(), null);
}
}
Console.ReadKey();
}