2

クラスのプロパティを指す式のみを渡すことができるようにする方法はありますか?

public class Foo
{
    public string Bar { get; set; }

    public void DoSomething()
    {
        HelperClass.HelperFunc(() => Bar);
    }
}

public static class HelperClass
{
    public static void HelperFunc(Expression<Func<string>> expression)
    {
        // Ensure that the expression points to a property
        // that is a member of the class Foo (or throw exception)
    }
}

また、必要に応じて、署名を変更して実際のクラスを渡すこともできます...

4

1 に答える 1

2

これが、ラムダをプロパティに変換する拡張メソッドです。ラムダがプロパティを指していない場合、例外がスローされます

public static PropertyInfo ToPropertyInfo(this LambdaExpression expression)
{
    MemberExpression body = expression.Body as MemberExpression;
    if (body != null)
    {
        PropertyInfo member = body.Member as PropertyInfo;
        if (member != null)
        {
            return member;
        }
    }
    throw new ArgumentException("Property not found");
}
于 2012-10-22T20:15:58.810 に答える