C #: учитывая src => src.property, код выбора свойства, если у вас есть строка «имя свойства»? - PullRequest
1 голос
/ 28 октября 2010

Я использую AutoMapper, где он имеет:

.ForMember( dest => dest.id, opt => opt.MapFrom(src => src.id))

Используя крайне правое выражение src => src.id, если у меня есть строковая переменная с именем свойства, как бы я выбрал свойство по нему?

Я пробовал это:

src => propertyName

Тогда пришлось смеяться, когда значением было «id».

Ответы [ 2 ]

3 голосов
/ 28 октября 2010

Вы можете использовать отражение, чтобы получить свойство по имени:

private R GetProperty<T, R>(T obj, string propertyName)
{
    PropertyInfo pi = obj.GetType().GetProperty(propertyName);
    return (R)pi.GetValue(obj, null);
}

Что бы вы использовали в AutoMapper, как это:

.ForMember( dest => dest.id, opt => opt.MapFrom(src => GetProperty(src, propertyName)))
1 голос
/ 28 октября 2010

Если у вас есть имя свойства, к которому вы хотите получить доступ, вы должны использовать отражение, чтобы получить MemberInfo, а затем вызывать свойство из MemberInfo.

src => src.GetType().GetProperty(propertyName).GetGetMethod().Invoke(src, new object[] {})

Конечно, этот фрагмент предполагает, что src имеет свойства, и что propertyName идентифицирует свойство объекта.

...