【发布时间】:2020-06-23 12:37:06
【问题描述】:
是否可以使用反射来区分 getter-only 属性和表达式主体属性?
class MyClass
{
DateTime GetterOnly { get; }
DateTime ExpressionBody => DateTime.Now;
}
例如,下面的方法如何完成?
enum PropertyKind
{
NotInteresting,
GetterOnly,
ExpressionBody,
}
PropertyKind GetPropertyKind(PropertyInfo propertyInfo)
{
if (propertyInfo.GetSetMethod(true) == null)
{
// what goes here??
}
return PropertyKind.NotInteresting;
}
相关文章: What is the difference between getter-only auto properties and expression body properties?
【问题讨论】:
-
你当然可以通过反射判断是否只实现了一个getter(只需搜索setter,它就不会在那里)。
-
一个表达式体属性是一个只有getter的属性,它的getter不只是返回支持字段值
-
我怀疑真正的问题是不同的。您是否正在尝试创建自定义序列化程序或分析器? Roslyn 分析器可以检测语法是仅获取的自动属性还是表达式体的。这就是重构可以在两者之间切换的方式。但在运行时,一个 getter 和另一个 getter 之间没有区别,除了它们的代码。反射无法分辨这些吸气剂来自哪里
-
当您说“表达式主体属性”时,您实际上是指那个意思,还是真的是指“自动实现的属性”?因为从 IL 中您无法区分普通属性和表达式主体属性。
-
除了一个属性和支持字段的存在:this sharplab.io example 表示自动属性具有
CompilerGenerated属性
标签: c# .net reflection .net-4.0 c#-7.0