11.用反射为静态类的属性赋值 C#例子 WPF例子
获取字段信息:通过字段名从
Variable_Library
类中获取静态公共属性的PropertyInfo
。解析值:根据字段类型,将字符串值解析为对应类型的对象。
赋值:将解析后的值赋给字段,如果字段不存在则输出调试信息。
public static void AssignValue(string variableName, string variableType, string variableValue){// 获取当前类型的字段信息PropertyInfo? field = typeof(Variable_Library).GetProperty(variableName, BindingFlags.Static | BindingFlags.Public);if (field != null){// 根据类型解析值object value = ParseValue(variableType, variableValue);// 为变量赋值field.SetValue(null, value);}else{Debug.WriteLine($"Field {variableName} not found.");}}
详细解析
获取字段信息
PropertyInfo? field = typeof(Variable_Library).GetProperty(variableName, BindingFlags.Static | BindingFlags.Public);
使用
typeof(Variable_Library)
获取Variable_Library
类的类型信息。调用
GetProperty
方法,传入字段名variableName
和绑定标志BindingFlags.Static | BindingFlags.Public
,查找静态且公共的属性。如果找到对应的属性,
field
会被赋值为对应的PropertyInfo
对象;否则为null
。
解析值
object value = ParseValue(variableType, variableValue);
private static object ParseValue(string type, string value){switch (type){case "string":return value;case "Int32":return int.Parse(value, CultureInfo.InvariantCulture);case "Boolean[]":string[] strings = value.Split(' ');bool[] bools=new bool[strings.Length];for (int i = 0; i < strings.Length; i++){if(!bool.TryParse(strings[i], out bools[i])){bools[i] = false; // 如果解析失败,默认设置为false}}return bools;case "Int64":return long.Parse(value);case "DateTime":return DateTime.Parse(value);default:throw new ArgumentException($"Unsupported type: {type}");}}
调用
ParseValue
方法,根据字段类型variableType
和字符串值variableValue
,解析出对应类型的对象。ParseValue
方法的作用是将字符串转换为指定类型的值(例如,将字符串"true"
转换为布尔值true
)。
赋值:
field.SetValue(null, value);
如果字段存在(
field != null
),调用SetValue
方法为字段赋值。null
表示字段是静态的,value
是解析后的值。
处理字段不存在的情况
Debug.WriteLine($"Field {variableName} not found.");
如果字段不存在(
field == null
),输出调试信息,提示字段未找到。
总结
这段代码的作用是:
通过字段名从
Variable_Library
类中查找静态公共属性。如果找到字段,解析字符串值为对应类型的对象,并为字段赋值。
如果字段不存在,输出调试信息提示。