我正在研究一种接受表达式树作为参数的方法,以及类的类型(或实例)。
基本思想是,此方法会将某些内容添加到将用于验证的集合中。
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 中,我想获取
PropertyInfo
T 的类型(从传入的主体)并将其与 rule[] 一起添加到集合中。目前,我正在考虑使用 expression.Body 并从“Convert.([propertyname])”中删除 [propertyname] 并使用反射来获得我需要的东西。这看起来既麻烦又错误。有没有更好的办法? - 这是我正在使用的特定模式吗?
- 最后,感谢任何关于我对我正在做的事情的误解的建议或澄清和/或 C# 表达式树的资源或良好信息。
谢谢!
伊恩
编辑:
DoSomething 方法中返回的一个示例expression.Body.ToString()
是包含“Convert(t.MyProperty)”的字符串(如果从上面的示例调用)。
我确实需要它是强类型的,所以如果我更改属性名称它不会编译。
感谢您的建议!