c# - 如何引用类(不是对象)的属性?

标签 c# reflection properties

我有一个模块可以遍历对象的公共(public)属性(使用 Type.GetProperties()),并对这些属性执行各种操作。然而,有时一些属性应该以不同的方式处理,例如,忽略。例如,假设我有以下类(class):

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
  // ...
}

但是这个解决方案看起来有点困惑而且容易出错...)

最佳答案

List<PropertyInfo> ignoredList = ...

ignoredList.Add(typeof(TestClass).GetProperty("Prop2"));

应该完成这项工作...只需检查是否 ignoredList.Contains(propinfo)

关于c# - 如何引用类(不是对象)的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11205686/

相关文章:

来自 FormCollection 的 C# LINQ 查询/投影

c# - 方法返回不同的字符串第二次调用 - 参数相同

java - 从命令行获取 pom.xml 属性

c# - 监视给定类的属性值变化的快速方法?

configuration - 将Clojure中的配置文件作为数据结构加载

c# - AES 加密 - 加密/解密添加额外字节

c# - 如何使用 Moles 作为构造函数?

c# - .NET 应用程序中用于协作工作的套接字、多线程

java - 如何将 String 变量解析为 Java 中的任何数据类型?

java - 我如何从通用类型中获取类