当前位置: 首页 > news >正文

11.用反射为静态类的属性赋值 C#例子 WPF例子

  1. 获取字段信息:通过字段名从 Variable_Library 类中获取静态公共属性的 PropertyInfo

  2. 解析值:根据字段类型,将字符串值解析为对应类型的对象。

  3. 赋值:将解析后的值赋给字段,如果字段不存在则输出调试信息。

        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.");}}
详细解析
  1. 获取字段信息

    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

  2. 解析值

    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)。

  1. 赋值

    field.SetValue(null, value);
    • 如果字段存在(field != null),调用 SetValue 方法为字段赋值。

    • null 表示字段是静态的,value 是解析后的值。

  2. 处理字段不存在的情况

    Debug.WriteLine($"Field {variableName} not found.");
    • 如果字段不存在(field == null),输出调试信息,提示字段未找到。

总结

这段代码的作用是:

  • 通过字段名从 Variable_Library 类中查找静态公共属性。

  • 如果找到字段,解析字符串值为对应类型的对象,并为字段赋值。

  • 如果字段不存在,输出调试信息提示。

http://www.dtcms.com/a/328704.html

相关文章:

  • K8S中,kubectl cordon、uncordon、drain、taint的区别
  • 计算机网络---用户数据报协议User Datagram Protocol(UDP)
  • 【Part 4 未来趋势与技术展望】第一节|技术上的抉择:三维实时渲染与VR全景视频的共生
  • vue--video使用动态src时,视频不更新
  • Java零基础笔记16(Java编程核心:存储读写数据方案—File文件操作、IO流、IO框架)
  • 利用生成式AI与大语言模型(LLM)革新自动化软件测试 —— 测试工程师必读深度解析
  • PythonDay25
  • Android实现Glide/Coil样式图/视频加载框架,Kotlin
  • 《C++进阶之继承多态》【final + 继承与友元 + 继承与静态成员 + 继承模型 + 继承和组合】
  • mapbox进阶,实现精灵图生成和拆分(小图任意大小,不固定),并简单使用
  • 选择排序专栏
  • Docker安装influxdb以及python基本操作
  • 传输层协议 TCP(1)
  • latex 中将新的一个section重新从1开始排序,而不是和前面的section继续排序
  • 更改webpack默认配置项
  • 第二十二天:指针与内存
  • 【C++详解】用红黑树封装模拟实现mymap、myset
  • 代码随想录刷题Day30
  • UnityWeb打包注意事项及与网页端通信
  • 初识c语言————排序方法
  • 【游戏开发记录】一款网游+修仙为背景的游戏
  • 美国英语 8 You‘re Going to Be Fine 早日康复
  • Dify 从入门到精通(第 32/100 篇):Dify 的日志分析与监控
  • 1688跨境寻源通API接入||跨境寻源通有哪些具体的功能和优势?
  • 反射的详解
  • CAP理论深度解析与工程实践指南
  • USB基础 -- USB2.0设备插入的过程
  • 陕西西安一家IPO四年亏损近25亿负债率攀升,控制权稳定性遭质疑
  • 力扣121:买卖股票的最佳时机
  • 100、【OS】【Nuttx】【构建】cmake 配置保存