Как в 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
// класс имеет методы
Это не учитывает наличие методов-расширения.