代码之家  ›  专栏  ›  技术社区  ›  Steffen

确定FieldInfo是否为编译器生成的BackingField

  •  4
  • Steffen  · 技术社区  · 15 年前

    标题几乎说明了一切,我怎么知道我是否正在为get;set;属性获取编译器生成的backingfield?

    我运行此代码以获取FieldInfos:

    Class MyType
    {
        private int foo;
        public int bar {get; private set; }
    }
    
    Type type = TypeOf(MyType);
    foreach (FieldInfo fi in type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.NonPublic))
    {
        // Gets both foo and bar, however bar is called <bar>k__backingfield.
    }
    

    所以问题是,我是否可以在不检查其名称的情况下,不知何故地检测到fieldinfo是一个backingfield?(这是非常没有文档的,在框架的下一个版本中可能会被破坏)

    1 回复  |  直到 15 年前
        1
  •  9
  •   Marc Gravell    15 年前

    检查 .IsDefined(typeof(CompilerGeneratedAttribute), false); 在他们身上。