Как в c# проверить является ли класс дата-классом?

Пишу программу для sql-скриптов, и мне необходимо провести проверку является ли класс дата классом. Как это можно сделать?

С помощью рефлексии я подключаю сборку/проект,

Assembly myLibrary = Assembly.LoadFile(@"путь");
        //прохожу по каждому типу в сборке 
        foreach(Type type in myLibrary.GetTypes())
        { //здесь нужно сделать проверку, что класс содержит только свойства }

Когда я использую

int count = type.GetMethods(BindingFlags.DeclaredOnly|BindingFlags.Instance|BindingFlags.Public).Count();

то он прибавляет и свойства. Как мне проверить содержатся ли только свойства в классе?


Ответы (1 шт):

Автор решения: Alexander Petrov

Допустим, имеется следующий класс:

class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Используя рефлексию, посмотрим, какие у него имеются методы:

var t = typeof(Person);

foreach (var m in t.GetMethods())
    Console.WriteLine(m.Name);

Вывод:

get_Id
set_Id
get_Name
set_Name
GetType
ToString
Equals
GetHashCode

Тут четыре метода от базового класса System.Object и методы с префиксами get_ и set_ - аксессоры свойств. Нужно их отфильтровать.

int methodCount = t.GetMethods()
    .Where(m => !m.Name.StartsWith("get_") && !m.Name.StartsWith("set_"))
    .Count();

Осталось учесть количество базовых методов:

if (methodCount == 4)
    // класс без методов
else
    // класс имеет методы

Это не учитывает наличие методов-расширения.

→ Ссылка