.net 使用反射获取poco类中的所有公共属性,不包括枚举属性

9avjhtql  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(149)

我使用反射来检索poco类的所有公共属性
poco例如

public class MetaData
    {
        [ExplicitKey]
        public string Id{ get; set; }

        
        public enum DataType
        {
            T1 = 1,
            T2 = 2,
            T3 = 3
        }
        
        public DataType MyDataType { get; private set; } //<- enum
        
        public string ParentFolder { get; private set; }

        public string FileName { get; private set; }
...

使用反射获取所有这些属性似乎总是排除枚举属性:相等

var publicPropertiesUsed = metaData.GetType().GetProperties().Where(x => x.PropertyType.IsPublic);

询问枚举属性时,IsPublic为false。
通过反思获得所有公共属性的正确途径是什么?

ctehm74n

ctehm74n1#

DataTypeenum嵌套在MetaData类中。在这种情况下,IsPublic返回false

true,如果Type被声明为公共类型并且不是嵌套类型;否则为false
请将enum移出MetaData类别,或使用IsVisible取代IsPublic

true,如果当前Type是公共类型或公共嵌套类型使得所有封闭类型都是公共的;否则为false

var publicPropertiesUsed = 
    metaData.GetType()
        .GetProperties()
        .Where(x => x.PropertyType.IsVisble);

相关问题