1

そのクラスのプロパティでクラスメソッドを呼び出す方法を理解しようとしています。これが私の2つのクラスです。

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 に答える