自己的字典<tkey,tvalue>的添加方法,它取表达式<func <t>&gt;作为参数</func <t> </tkey,tvalue>

时间:2013-02-11 15:35:58

标签: c# dictionary

我正在尝试为Dictionary<TKey,TValue>实现一个Add属性作为参数。

我想如何发起词典:

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类,我可以从我想要的每个Property类型调用Add方法,并将Property Name存储为TKey?这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

如何像这样实例化你的字典呢?

var OrigionalValues = new ExpressionDictionary<object,object>();