Как добавить значение в словарь, используя отражение в C #? - PullRequest
3 голосов
/ 02 марта 2011

У меня есть следующий словарь:

private Dictionary<string, double> averages = new Dictionary<string, double>();

Теперь я хочу использовать отражение, чтобы добавить два дополнительных значения. Я могу получить информацию о поле, но что еще мне нужно сделать?

FieldInfo field = ProjectInformation.SourceManager.GetType().GetField("averages");
if (field != null)
{
    //what should be here?
}

Ответы [ 3 ]

5 голосов
/ 02 марта 2011
MethodInfo mi = field.FieldType.GetMethodInfo("set_Item");
Object dict = field.GetValue(ProjectInformation.SourceManager);
mi.Invoke(dict, new object[] {"key", 0.0} );
4 голосов
/ 02 марта 2011

Если вам нужно получить поле и значения только для модульного тестирования, рассмотрите возможность использования Microsoft PrivateObject

Это там, чтобы вы могли проверить внутреннее состояние элементов данных во время модульного тестирования, если вам нужно, что, похоже, то, что вы пытаетесь сделать.

В своих юнит-тестах вы можете сделать следующее:

MyObject obj = new MyObject();
PrivateObject privateAccessor = new PrivateObject(obj);
Dictionary<string, double> dict = privateAccessor.GetFieldOrProperty("averages") as Dictionary<string, double>;

Тогда вы можете свободно выбирать и устанавливать любые значения из словаря.

0 голосов
/ 02 марта 2011
if(field != null)
{
   field.GetValue(instance);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...