Я пытаюсь получить функцию установки значения элемента словаря.Я знаю, что объект - это Dictionary , но я не знаю типы Tkey и TValue, поэтому я думаю, что мой единственный способ - использовать IDictionary.
В псевдокоде я хочучтобы сделать что-то вроде этого;
Action<object> keySetter = dictionary.items[index].value.setter
Action<object> valueSetter = dictionary.items[index].key.setter
К сожалению, у IDictionary нет индексатора, и я не уверен, как добраться до фактических ключей и значений.
Прямо сейчас я перебираюзаписи словаря и получают установщик от этого, но всякий раз, когда я вызываю установщик, он, кажется, не меняется на значение в словаре.Поэтому я подозреваю, что DictionaryEntry является копией и не указывает на фактическое значение в словаре.
//for simplicity sake a Dictionary is added here, but usually the TKey and Tvalue are not known
IDictionary target = new Dictionary<int, string>();
target.Add( 0, "item 1" );
foreach ( DictionaryEntry dictionaryEntry in target )
{
//want to get the setter for the item's key setter and value setter
PropertyInfo keyProperty = dictionaryEntry.GetType().GetProperty( "Key" );
PropertyInfo valueProperty = dictionaryEntry.GetType().GetProperty( "Value" );
Action<object> keySetter = ( val ) =>
{
keyProperty.SetMethod.Invoke( dictionaryEntry, new object[] { val } );
};
Action<object> valueSetter = ( val ) =>
{
valueProperty.SetMethod.Invoke( dictionaryEntry, new object[] { val } );
};
keySetter.Invoke( 1 );
valueSetter.Invoke( "item 1 value succesfully modified" );
Console.WriteLine( target.Keys ); //no change
Console.WriteLine( target.Values ); //no change
}
Поскольку я действительно знаю, что IDictionary на самом деле представляет собой словарь , возможно, яможет сделать магию отражения, чтобы получить сеттер таким образом?