Мое намерение состоит в том, чтобы передать открытые свойства класса, например, сказать:
class MyTestClass
{
public string Name { get; set; }
public DateTime StartedAt { get; set; }
public TimeSpan Duration { get; set; }
}
функции и параметры:
static void MyCustomFunc(params Expression<Func<MyTestClass, object>>[] props)
{
foreach (var p in props)
{
// The following only works for Name property, not for StartedAt or Duration
MemberExpression member = p.Body as MemberExpression;
PropertyInfo propertyInfo = (PropertyInfo)member.Member;
string name = propertyInfo.Name;
Type type = propertyInfo.PropertyType;
Func<MyTestClass, object> func = p.Compile();
}
}
Функция должна собирать эту информацию ипередать его в класс-экспортер, который экспортирует наборы MyTestClass
объектов в файл CSV.
Выходные данные, записанные в файл CSV, зависят от количества, типа и порядка свойств, введенных в MyCustomFunc
.
Так вот:
MyCustomFunc(x => x.Name, x => x.StartedAt);
создаетотличается от:
MyCustomFunc(x => x.StartedAt, x => x.Name);
и
MyCustomFunc(x => x.StartedAt, x => x.Name, x => x.Duration);
отличается от
MyCustomFunc(x => x.Duration, x => x.StartedAt, x => x.Name);
Моя проблема заключается в том, чтобы заставить отражение работать.По какой-то причине я не могу понять p.Body
:
- для
{x => x.Name}
равно {x.Name}
, но - для
{x => x.StartedAt}
равно {Convert(x.StartedAt)}
Первый может быть обработан с помощью
MemberExpression member = p.Body as MemberExpression;
, а второй возвращает null
, поэтому я получаю исключение нулевой ссылки.