使用反射更新现有实例

Using Reflection to update existing Instance

我有一个字典,其中包含我想要在我拥有的 class 实例中匹配和更新的值对。

例如我有;

name -> test
userid -> 1

在我的 Class 然后我有

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)

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

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

 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;
    }