加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于C#表达式树的建议

发布时间:2020-12-16 01:29:04 所属栏目:百科 来源:网络整理
导读:我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例). 基本思想是此方法将某些内容添加到将用于验证的集合中. public interface ITestInterface{ //Specify stuff here.}private static void DoSomethingT(ExpressionFuncT,object expression,pa
我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例).

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

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到另一个问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读