我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例). 基本思想是此方法将某些内容添加到将用于验证的集合中. 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到另一个问题.