Question: HI guys say I have an object with type dictionary

I already made a function that will add data to dictionary and get data from a dictionary using reflection.

My problem is how do you modify an item in dictionary using reflection?

Example in code (not using reflection):

```
dictionary<string, string> dict = new dictionary<string, string>();
dict.add("key1", "data1");
dict.add("key2", "data2");
console.writeline(dict["key2"]) // <- made using dynamic since it wont store to the objact data (made from relfection)

// code above already accomplished using reflection way
// code below, don't know how to accomplish using reflection way

dict["key2"] = "newdata" // <- how to modify the value of the selected item in object data (made from using reflection)

```

Answer: 
You need to find the indexer property you need and set the value through that:

```
object key = //
object newValue = //
PropertyInfo indexProp = dict.GetType()
    .GetProperties()
    .First(p => p.GetIndexParameters().Length > 0 && p.GetIndexParameters()[0].ParameterType == key.GetType());

indexProp.SetValue(dict, newValue, new object[] { key });

```

If you know you're dealing with a generic dictionary, you can get the property directly i.e.

```
PropertyInfo indexProp = dict.GetType().GetProperty("Item");

```
```
        var dictionary = new Dictionary<string, string>
        {
            { "1", "Jonh" },
            { "2", "Mary" },
            { "3", "Peter" },
        };

        Console.WriteLine(dictionary["1"]); // outputs "John"

        // this is the indexer metadata;
        // indexer properties are named with the "Item"
        var prop = dictionary.GetType().GetProperty("Item");

        // the 1st argument - dictionary instance,
        // the second - new value
        // the third - array of indexers with single item, 
        // because Dictionary<TKey, TValue>.Item[TKey] accepts only one parameter
        prop.SetValue(dictionary, "James", new[] { "1" });

        Console.WriteLine(dictionary["1"]); // outputs "James"

```