We have a dictionary in some unknown class, Dictionary<TKey, TValue> MyDictionary
and we have the FieldInfo
object obtained using reflection. We also have the type arguments Type keyType = typeof(TKey)
and Type valueType = typeof(TValue)
which are obtained during runtime.
The key-value pairs are present in two separate lists List<object> keys
and List<object> values
.
How do we generate the dictionary and set its value using FieldInfo.SetValue()
?
So far, we tried this:
var dictionary = Activator.CreateInstance(fieldInfo.FieldType);
var keys = new List<object>();
var values = new List<object>();
// Code to set keys and values
for (int i = 0; i < keys.Count; i++)
(dictionary as IDictionary).Add(keys[i], values[i]);
fieldInfo.SetValue(mainObj, dictionary);
In specific case where TValue
is List<int>
, the add statement throws an exception
System.ArgumentException: 'The value "System.Collections.Generic.List
1[System.Object]" is not of type "System.Collections.Generic.List
1[System.Int32]" and cannot be used in this generic collection.
Aucun commentaire:
Enregistrer un commentaire