Название может не совсем объяснить, что мне нужно, но вот пример:
Это моя модель:
public class Car {
public int CarId { get; set; }
public string Name { get; set; }
public string Model { get; set; }
public string Make { get; set; }
}
Вот логика:
class Program {
static void Main(string[] args) {
var cars = new List<Car> {
new Car { CarId = 1, Make = "Foo", Model = "FooM", Name = "FooN" },
new Car { CarId = 2, Make = "Foo2", Model = "FooM2", Name = "FooN2" }
}.AsQueryable();
doWork(cars.GetType(), cars);
}
static void doWork(Type type, object value) {
if (isTypeOfIEnumerable(type)) {
Type itemType = type.GetGenericArguments()[0];
Console.WriteLine(
string.Join<string>(
" -- ", itemType.GetProperties().Select(x => x.Name)
)
);
//How to grab values at the same order as properties?
//E.g. If Car.Name was pulled first,
//then the value of that property should be pulled here first as well
}
}
static bool isTypeOfIEnumerable(Type type) {
foreach (Type interfaceType in type.GetInterfaces()) {
if (interfaceType.IsGenericType &&
interfaceType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
return true;
}
return false;
}
}
То, что я здесь делаю, может не иметь смысла, но мне нужна такая операция где-то еще. У меня есть Type
и Object
, и мне нужно построить из него таблицу. В этом примере метод doWork
очень похож на тот, с которым я имею дело в моем реальном примере.
Мне удалось получить имена свойств, но я не смог найти способ извлечь значения из параметра value
.
Любой