开发者

Having trouble wrapping my head around using expressions in c#

开发者 https://www.devze.com 2023-02-26 05:33 出处:网络
I am trying to do a simple expression example of getting the name of a property.This is meant as a simple tutorial to walk myself through wrapping my head around C# Expressions.

I am trying to do a simple expression example of getting the name of a property. This is meant as a simple tutorial to walk myself through wrapping my head around C# Expressions.

I have the following code:

public class TestClass
{
    public string TestProperty { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        TestClass test = new TestClass();
        string name = GetPropertyName(() => test.TestProperty);

        Console.WriteLine("Property name is: ");
        Console.ReadLine();
    }

    public string GetPropertyName(Expre开发者_开发百科ssion<Func<object, object>> expression)
    {
        var memberExp = expression.Body as MemberExpression;
        if (memberExp == null)
            throw new InvalidOperationException("Not a member expression");

        return memberExp.Member.Name;
    }
}

This produces 2 issues:

1) When is tart typing string name = GetPropertyName Intellisense doesn't actually show my GetPropertyName() method.

2) The () => test.TestProperty gives a compile error of Delegate 'System.Func<object,object>' does not take 0 arguments

I have been trying to use http://marlongrech.wordpress.com/2008/01/08/working-with-expression-trees-part-1/ and http://jagregory.com/writings/introduction-to-static-reflection/ as tutorials/references, but I am definitely not understanding something.


First, System.Func<object,object> means your lambda expression takes an argument of type object and returns an object, so you're going to have an expression like (arg) => test.PropertyName. If you don't want to take an input parameter, just use System.Func<object>.

Second, you're not seeing your GetPropertyName method in Intellisense because Main is a static method. Either make an instance of your Program object and call it from there, or declare GetPropertyName as statictoo.

0

精彩评论

暂无评论...
验证码 换一张
取 消