我正在尝试实现一个Dictionary<TKey,TValue>
将属性作为参数的添加方法。
我想如何启动字典:
ExpressionDictionary<string,string> OrigionalValues = new ExpressionDictionary<string,string>();
我想在属性中添加一个项目,例如:
public string Title
{
get { return _title; }
set
{
if (_title != value)
{
_title = value;
OrigionalValues.Add(() => Title,value);
}
}
}
我的 ExpressionDictionary 类:
public class ExpressionDictionary<T,TValue> : Dictionary<string, TValue>
{
public void Add(Expression<Func<T>> property, TValue value)
{
var body = property.Body as MemberExpression;
if (body != null) Add(body.Member.Name, value);
}
}
因此,PropertName 以字符串形式存储为 Dictionary 的 TKey。这在属性是字符串类型时有效,但是当我尝试添加 DateTime 属性和字符串属性时,它会挂起,因为它无法转换,这很清楚。
我想要实现的是我不需要对属性的字符串名称进行硬编码,例如
OrigionalValues.Add("Title",value);
如何设计我的 Add 方法或 ExpressionDictionary 类,我可以从我想要的每个属性类型中调用 Add 方法,并且属性名称存储为 TKey?这甚至可能吗?