我有一个模块,它遍历对象的公共属性(使用 Type.GetProperties()),并对这些属性执行各种操作。然而,有时应该以不同方式处理某些属性,例如忽略。例如,假设我有以下课程:
class TestClass
{
public int Prop1 { get; set; }
public int Prop2 { get; set; }
}
现在,我希望能够指定每当我的模块获取类型为 TestClass 的对象时,应该忽略属性 Prop2。理想情况下,我希望能够这样说:
ReflectionIterator.AddToIgnoreList(TestClass::Prop2);
但这显然行不通。我知道如果我首先创建一个类的实例,我可以获得一个 PropertyInfo 对象,但是仅仅为了这样做而创建一个人工实例似乎是不正确的。有没有其他方法可以获得 TestClass::Prop2 的 PropertyInfo 对象?
(作为记录,我当前的解决方案使用字符串文字,然后将其与迭代的每个属性进行比较,如下所示:
ReflectionIterator.AddToIgnoreList("NamespaceName.TestClass.Prop2");
然后在遍历属性时:
foreach (var propinfo in obj.GetProperties())
{
if (ignoredProperties.Contains(obj.GetType().FullName + "." + propinfo.Name))
// Ignore
// ...
}
但这个解决方案似乎有点凌乱且容易出错......)