c# – 如何确定属性是否具有反映自动实现的属性?

所以在我的情况下,我正在使用反射来发现一个类的结构.我需要能够发现PropertyInfo对象是否属性是自动实现的属性.我假设反射API不会公开这样的功能,因为自动属性依赖于C#,但是有没有解决方法来获取这些信息?
最佳答案
您可以检查get或set方法是否使用CompilerGenerated属性进行标记.然后,您可以将其与寻找包含CompilerGenerated属性的私有字段相结合,该属性包含属性名称和字符串“BackingField”.

也许:

public static bool MightBeCouldBeMaybeAutoGeneratedInstanceProperty(
    this PropertyInfo info
) {
    bool mightBe = info.GetGetMethod()
                       .GetCustomAttributes(
                           typeof(CompilerGeneratedAttribute),
                           true
                       )
                       .Any();
    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.GetCustomAttributes(
                             typeof(CompilerGeneratedAttribute),
                             true
                         ).Any()
                     )
                     .Any();

        return maybe;
    }

这不是傻瓜的证据,相当脆弱,也许不可以说,单声道.

转载注明原文:c# – 如何确定属性是否具有反映自动实现的属性? - 代码日志