当前位置 : 主页 > 编程语言 > c语言 >

关于C#表达式树的建议

来源:互联网 收集:自由互联 发布时间:2021-06-25
我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例). 基本思想是此方法将某些内容添加到将用于验证的集合中. public interface ITestInterface{ //Specify stuff here.}private static v
我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例).

基本思想是此方法将某些内容添加到将用于验证的集合中.

public interface ITestInterface
{
    //Specify stuff here.
}

private static void DoSomething<T>(Expression<Func<T, object>> expression, params IMyInterface[] rule)
{
    // Stuff is done here.
}

该方法调用如下:

class TestClass
{
    public int MyProperty { get; set; }
}

class OtherTestClass  : ITestInterface
{
    // Blah Blah Blah.
}

static void Main(string[] args)
{
    DoSomething<TestClass>(t => t.MyProperty, 
        new OtherTestClass());
}

我这样做是因为我希望传入的属性名称是强类型的.

我正在努力的几件事……

>在DoSomething中,我想获得T的PropertyInfo类型(来自传入的主体)并将其与rule []一起添加到集合中.目前,我正在考虑使用expression.Body并从“转换.([propertyname])”中删除[propertyname]并使用反射来获取我需要的东西.这看起来既麻烦又错误.有没有更好的办法?
>这是我正在使用的特定模式吗?
>最后,对于我对我正在做的事情的误解和/或C#表达树上的资源或良好信息的任何建议或说明也受到赞赏.

谢谢!

伊恩

编辑:

表达式.Body.ToString()在DoSomething方法中返回的示例是一个字符串,如果从上面的示例调用,则包含“Convert(t.MyProperty)”.

我确实需要它是强类型的,所以如果我更改属性名称它将无法编译.

谢谢你的建议!

从Expression.Body收集PropertyInfo对象看起来类似于 my solution到另一个问题.
网友评论