如何使用c#中的反射向字典添加值?

时间:2011-03-01 23:00:08

标签: c# reflection

我有以下词典:

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

现在我想使用反射添加两个额外的值。我可以检索字段信息,但我还需要做什么?

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

3 个答案:

答案 0 :(得分:5)

MethodInfo mi = field.FieldType.GetMethodInfo("set_Item");
Object dict = field.GetValue(ProjectInformation.SourceManager);
mi.Invoke(dict, new object[] {"key", 0.0} );

答案 1 :(得分:4)

如果您需要获取单元测试的字段和值,请考虑使用Microsoft的PrivateObject

它在那里你可以在单元测试期间检查数据成员的内部状态,如果你需要,这似乎是你想要做的。

在您的单元测试中,您可以执行以下操作:

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

然后您可以自由地从字典中获取并设置所需的任何值。

答案 2 :(得分:0)

if(field != null)
{
   field.GetValue(instance);
}