使用反射更新现有实例
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;
}
我有一个字典,其中包含我想要在我拥有的 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;
}