首页 / .NET / 正文

[C#].NET/C#程序开发中获取一个实体类中的所有属性集合的方法有哪些呢?

4778 发布于: 2018-02-09 读完约需6分钟

问题描述

如题,在.NET/C#程序开发中,获取一个实体类中的所有属性集合的方法有哪些呢?

方案一

使用反射,如果是一个实例对象,则使用GetType()方法的GetProperties()

obj.GetType().GetProperties();

如果是一个System.Type,则:

typeof(Foo).GetProperties();

例如:

class Foo {
    public int A {get;set;}
    public string B {get;set;}
}
...
Foo foo = new Foo {A = 1, B = "abc"};
foreach(var prop in foo.GetType().GetProperties()) {
    Console.WriteLine("{0}={1}", prop.Name, prop.GetValue(foo, null));
}

方案二

使用反射来实现,以下方法返回的是一个属性名称-值对应的数据字典:

public static Dictionary<string, object> DictionaryFromType(object atype)
    {
        if (atype == null) return new Dictionary<string, object>();
        Type t = atype.GetType();
        PropertyInfo[] props = t.GetProperties();
        Dictionary<string, object> dict = new Dictionary<string, object>();
        foreach (PropertyInfo prp in props)
        {
            object value = prp.GetValue(atype, new object[]{});
            dict.Add(prp.Name, value);
        }
        return dict;
    }

以下方法只返回类的属性名称数组集合:

public static string[] PropertiesFromType(object atype)
    {
        if (atype == null) return new string[] {};
        Type t = atype.GetType();
        PropertyInfo[] props = t.GetProperties();
        List<string> propNames = new List<string>();
        foreach (PropertyInfo prp in props)
        {
            propNames.Add(prp.Name);
        }
        return propNames.ToArray();
    }

方案三

返回类的属性名称数组集合,如:

public List<string> GetPropertiesNameOfClass(object pObject)
{
    List<string> propertyList = new List<string>();
    if (pObject != null)
    {
        foreach (var prop in pObject.GetType().GetProperties())
        {
            propertyList.Add(prop.Name);
        }
    }
    return propertyList;
}

方案四

使用命名空间System.Reflection下的Type.GetProperties()方法,如:

PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public|BindingFlags.Static);

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: [C#].NET/C#程序开发中获取Lambda表达式中属性名称的方法有哪些呢?

下一篇: [C#].NET/C#程序开发中如何将多行回车/换行符替换成一个字符串?

本文永久链接码友网 » [C#].NET/C#程序开发中获取一个实体类中的所有属性集合的方法有哪些呢?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册