c# - 从属性而不是名称获取 PropertyInfo

标签 c# reflection

例如,我有这个简单的类:

public class MyClass
{
  public String MyProperty { get; set; }
}

获取 MyProperty 的 PropertyInfo 的方法是:

typeof(MyClass).GetProperty("MyProperty");

这很糟糕!

为什么?简单:一旦我更改属性的名称,它就会崩溃,它需要大量专门的测试来找到像这样使用属性的每个位置,重构和使用树无法找到这些类型的访问。

没有任何方法可以正确访问属性吗?在编译时验证的东西?
我喜欢这样的命令:

propertyof(MyClass.MyProperty);

最佳答案

目前最接近的方法是使用表达式树:

GetProperty<MyClass>(x => x.MyProperty)

然后在 GetProperty 中提取 PropertyInfo(您必须编写)。然而,这有点脆弱 - 没有编译时保证表达式树只是一个属性访问。

另一种选择是将您正在使用的属性名称保留在可以轻松进行单元测试的地方,并依赖它。

基本上,您想要的是神话般的 infoof 运算符,它已被 C# 团队多次讨论 - 但到目前为止还没有成功 :(

关于c# - 从属性而不是名称获取 PropertyInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2997376/

相关文章:

java - Java 对继承方法的反射(reflection)在 Windows 和 Linux 中是否不同?

c# - 订阅已加载程序集的事件

c# - 没有获得安装包 Microsoft Entity Framework Core 的选项

c# - 如何使用 C# 提取 MFCC

c# - 是否有可能知道属于某个类或其父类的属性

java - 从调用者获取 ClassLoader 对象

Go - 如何更改指针参数的值?

c# - 自动生成的 c# 客户端应该如何处理可以返回不同类型的 API 调用?

c# - CMD 上未返回 ExitCode

c# - DrawItem 事件中某个 listView 项的 State 错误