получать свойства с использованием отражений для объекта общего типа
У меня есть общий класс, в котором у меня есть функция для получения свойств переданного общего объекта. Это так, как показано ниже.
public class ExportToCsv<T>
where T: class
{
public ExportToCsv(List<T> obj)
{
this.Data = obj;
}
public StringBuilder CreateRows()
{
IEnumerable<PropertyInfo> properties = typeof(T).GetProperties();
}
}
Он отлично работает и возвращает мне свойства, если я передаю объект, выбрав из объекта (класса), как показано ниже
//GetLeadingRoutingRecords returns a class/object
var result = from obj in GetLeadRoutingRecords()
select new
{
LeadRoutingId = obj.LeadRoutingID,
Make = obj.Make
};
и передать этот результат в результате. result.ToList();
но когда я пытаюсь создать свой собственный анонимный объект, создав класс для свойств, как показано ниже, он не работает, не возвращая никаких свойств
Примечание: приведенный ниже код вызывается в цикле, и он хорошо функционирует и передается вышеуказанной функции, может видеть все значения путем отладки.
public CsvReport function return(){
return new CsvReport
{
ShopName = this.val,
TargetVehicleName = val
}.ToList();
}
класс, который я написал для вышеупомянутого анонимного объекта, выглядит следующим образом:
public class CsvReport
{
public string ShopName { get; set; }
public string TargetVehicleName { get; set; }
}
поэтому в этом случае он не работает, я выбираю первую запись и получаю свойства, как показано ниже
this.Data.First().GetType().GetProperties();
Я хочу использовать первый шаблон даже здесь, который является type(T).GetProperties
Итак, любая работа вокруг пожалуйста........................
Ответы
Ответ 1
Отражение на typeof(T)
отлично работает; здесь более простой пример, основанный на вашем, но (что важно) runnable. Он выводит:
ShopName
TargetVehicleName
код:
using System;
using System.Collections.Generic;
public class CsvReport
{
public string ShopName { get; set; }
public string TargetVehicleName { get; set; }
}
class ExportToCsv<T>
{
List<T> data;
public ExportToCsv(List<T> obj)
{
data = obj;
}
public void WritePropNames()
{
foreach (var prop in typeof(T).GetProperties())
{
Console.WriteLine(prop.Name);
}
}
}
static class Program
{
static void Main()
{
var obj = new List<CsvReport>();
obj.Add(new CsvReport { ShopName = "Foo", TargetVehicleName = "Bar" });
new ExportToCsv<CsvReport>(obj).WritePropNames();
}
}