使用Reflection更新现有实例

时间:2015-10-22 19:55:55

标签: c# reflection

我有一个字典,其中包含我想要匹配的值对,并在我所拥有的类的实例中进行更新。

例如,我有;

name -> test
userid -> 1

在我的课程中我有

MyClass.Name
MyClass.UserId

我想设置MyClass.Name = test

目前我有以下方法;

 public static GridFilters ParseGridFilters(Dictionary<string,string> data, MyClass myClass)
        {
            foreach (KeyValuePair<string, string> kvp in data)
            {
                Type t = typeof(MyClass);
                t.GetProperty(kvp.Value, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);

            }

            return myClass;
        }

如何检查kvp.Key是否存在(无论我认为我是否已用BindingFlags覆盖),然后将kvp.Value设置为myClass。(kvp.Key)

1 个答案:

答案 0 :(得分:1)

您必须使用反射保存对要检索的属性的引用,然后使用 SetValue 设置其值。

您的代码中也存在错误。 根据您的解释,该属性的名称似乎在,而不是

 public static GridFilters ParseGridFilters(Dictionary<string,string> data, MyClass myClass)
    {
        foreach (KeyValuePair<string, string> kvp in data)
        {
            Type t = typeof(MyClass);
            var prop = t.GetProperty(kvp.Key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance);
            prop.SetValue(myClass, kvp.Value, null);
        }

        return myClass;
    }