リフレクションを使用して、オブジェクトの正確な状態を表すすべてのメンバーを取得する必要があります。したがって、これらのメンバーにはフィールド ( 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....) ?