我需要使用反射获取代表对象确切状态的所有成员。所以这些成员包括字段 ( FieldInfo
) 和自动属性 ( PropertyInfo
)。我可以得到所有的FieldInfo
s 使用
type.GetFields(); //ok some flags needed here
并获取此链接中提到的自动实现的属性:
public static bool MightBeCouldBeMaybeAutoGeneratedInstanceProperty(this PropertyInfo info)
{
bool mightBe = info.GetGetMethod().HasCompilerGeneratedAttribute();
if (!mightBe)
return false;
bool maybe = info.DeclaringType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
.Where(f => f.Name.Contains(info.Name))
.Where(f => f.Name.Contains("BackingField"))
.Where(f => f.HasCompilerGeneratedAttribute())
.Any();
return maybe;
}
public static bool HasCompilerGeneratedAttribute(this MemberInfo mi)
{
return mi.GetCustomAttributes(typeof(CompilerGeneratedAttribute), true).Any();
}
正如回答者所说,这确实很脆弱。有没有更标准的方法来实现这一目标?我在想,可能是这样的东西BindingFlags
?
type.GetMembers(BindingFlags....) ?