2013-02-11 4 views
1

Я пытаюсь реализовать метод добавления для Dictionary<TKey,TValue>, который берет значение как параметр.Свой метод добавления для словаря <TKey,TValue>, который принимает выражение <Func<T>> как параметр

Как я хочу, чтобы инициировать словарь:

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 хранится как TKey словаря в виде строки. Это работает, когда свойство является типом строки, но когда я пытаюсь добавить свойство DateTime и строку Property, оно зависает, потому что оно не может преобразовать, что ясно.

То, что я пытаюсь для того чтобы достигнуть в том, что мне не нужно жестко строковое имя свойства как

OrigionalValues.Add("Title",value); 

Как я могу разработать свой метод Add или ExpressionDictionary класс, который я могу назвать Добавить метод из каждого типа свойства, который я хочу, и имя свойства хранится как TKey? Возможно ли это?

ответ

1

Как насчет создания вашего словаря?

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

Бог .. да, это сработает: D – Mark

Смежные вопросы