Как я могу получить количество атрибутов, которые имеет объект? - PullRequest
5 голосов
/ 12 ноября 2010

У меня есть класс с количеством атрибутов, и мне нужно найти способ подсчитать количество атрибутов, которые у него есть. Я хочу сделать это, потому что класс читает файл CSV, и если количество атрибутов (csvcolumns) меньше, чем число столбцов в файле, должны произойти особые вещи. Вот пример того, как выглядит мой класс:

    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; }
    }

Я пытался сделать это:

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

Но это с треском провалилось. Будем весьма благодарны за любую помощь (ссылки на некоторые документы, другие ответы или просто предложения)!

Ответы [ 4 ]

13 голосов
/ 26 февраля 2014

Пожалуйста, используйте следующий код:

Type type = typeof(YourClassName);
int NumberOfRecords = type.GetProperties().Length;
9 голосов
/ 12 ноября 2010

Поскольку атрибуты находятся в свойствах, вам необходимо получить атрибуты для каждого свойства:

Type type = typeof(StaffRosterEntry);
int attributeCount = 0;
foreach(PropertyInfo property in type.GetProperties())
{
 attributeCount += property.GetCustomAttributes(false).Length;
}
0 голосов
/ 12 ноября 2010

Используя Reflection, у вас есть метод GetAttributes (), который возвращает массив объекта (атрибутов).

Так что, если у вас есть экземпляр объекта, тогда получите тип с помощью obj.GetType () итогда вы можете использовать метод GetAttributes ().

0 голосов
/ 12 ноября 2010

Это не проверено и просто не в моей голове

System.Reflection.MemberInfo info = typeof(StaffRosterEntry);
object[] attributes = info.GetCustomAttributes(true);
var attributeCount = attributes.Count(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...