IntrepidDude
IntrepidDude

Reputation: 1053

How do I get the count of attributes that an object has?

I've got a class with a number of attributes, and I need to find a way to get a count of the number of attributes it has. I want to do this because the class reads a CSV file, and if the number of attributes (csvcolumns) is less than the number of columns in the file, special things will need to happen. Here is a sample of what my class looks like:

    public class StaffRosterEntry : RosterEntry
    {
        [CsvColumn(FieldIndex = 0, Name = "Role")]
        public string Role { get; set; }

        [CsvColumn(FieldIndex = 1, Name = "SchoolID")]
        public string SchoolID { get; set; }

        [CsvColumn(FieldIndex = 2, Name = "StaffID")]
        public string StaffID { get; set; }
    }

I tried doing this:

var a = Attribute.GetCustomAttributes(typeof(StaffRosterEntry));
var attributeCount = a.Count();

But this failed miserably. Any help you could give (links to some docs, or other answers, or simply suggestions) is greatly appreciated!

Upvotes: 12

Views: 52130

Answers (4)

gideonlouw
gideonlouw

Reputation: 427

Please use the following code:

Type type = typeof(YourClassName);
int NumberOfRecords = type.GetProperties().Length;

Upvotes: 27

Mike Dour
Mike Dour

Reputation: 3766

Since the attributes are on the properties, you would have to get the attributes on each property:

Type type = typeof(StaffRosterEntry);
int attributeCount = 0;
foreach(PropertyInfo property in type.GetProperties())
{
 attributeCount += property.GetCustomAttributes(false).Length;
}

Upvotes: 12

Shiv Kumar
Shiv Kumar

Reputation: 9799

Using Reflection you have a GetAttributes() method that will return an array of object (the attributes).

So if you have an instance of the object then get the type using obj.GetType() and then you can use the GetAttributes() method.

Upvotes: 2

Saif Khan
Saif Khan

Reputation: 18782

This is untested and just off the top of my head

System.Reflection.MemberInfo info = typeof(StaffRosterEntry);
object[] attributes = info.GetCustomAttributes(true);
var attributeCount = attributes.Count(); 

Upvotes: 2

Related Questions