1

我试图弄清楚如何在该类的属性上调用类方法。这是我的两门课:

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() {}
}

MrResult 继承自 MrBase。

现在,我希望能够在这些类的任何属性上调用 NullIfEmpty 方法......就像这样:

MrResult r = new MrResult();
r.Description = "";
r.Description.NullIfEmpty();
r.Owner = "Eric";
r.Owner.NullIfEmpty();

谢谢。

埃里克

4

2 回答 2

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;
}
于 2012-08-06T14:45:35.870 回答
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();
}
于 2012-08-06T14:38:07.850 回答