Я думаю, что в конечном итоге вам нужно будет сохранить либо объект PropertyInfo, связанный со свойством, либо строковое представление имени свойства в вашем отображаемом объекте. Синтаксис у вас есть:
mapping[peep.FirstName] = "Name";
Создаст запись в словаре со значением ключа, равным значению свойства peep.FirstName, и значением, равным «Имя».
Если вы сохраняете имя свойства в виде строки:
mapping["FirstName"] = "Name";
Затем вы можете использовать отражение, чтобы получить свойство "FirstName" вашего объекта. Однако вам придется передать объект «peep» в функцию Convert. Это похоже на то, что вы хотите сделать.
Вы также можете сойти с ума с помощью выражений и сделать что-то вроде:
var mapping = new Dictionary<Expression<Action<T>>,string>();
mapping[ p => p.FirstName ] = "Name";
Тогда в вашей функции Convert вы можете проверить выражение. Это будет выглядеть примерно так:
private Dictionary<string,string> Convert(Dictionary<Expression<Action<T>>,string> mapping)
{
var result = new Dictionary<string,string>();
foreach(var item in mapping)
{
LambdaExpression ex = item.Key as LambdaExpression;
string propertyName = ((MemberExpression)ex.Body).Member.Name;
string propertyValue = item.Value;
result.Add(propertyName,proeprtyValue);
}
return result;
}
Это в большей или меньшей степени не в моей голове, поэтому я могу немного отключить типы выражений. Если есть проблемы с этой реализацией, дайте мне знать, и я посмотрю, смогу ли я разработать функциональный пример.