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

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

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

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

cs 复制代码
        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. 获取字段信息

    cs 复制代码
    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. 解析值

    cs 复制代码
    object value = ParseValue(variableType, variableValue);
    cs 复制代码
            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)。

  3. 赋值

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

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

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

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

总结

这段代码的作用是:

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

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

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

相关推荐
Dovis(誓平步青云)6 小时前
牛奶不能减成负数:冰箱库存的筛选、去重与不可变更新
android·java·开发语言
OPEN-F6 小时前
Python进阶教程:算法与数据结构入门
开发语言·python
薛定猫AI6 小时前
【技术干货】Claude Code多模型代理与反馈闭环:Python实现可验证的AI编程工作流
开发语言·python·ai编程
XR1234567887 小时前
工厂车间无线网络怎么选?AGV 与复杂环境是分水岭
开发语言·php
zq_63897 小时前
利用 MATLAB 调用 STK Object Model COM 显示雷达受干扰前后探测范围的变化
开发语言·matlab
大黄说说7 小时前
类型安全时代:PHP 8+ 的联合类型、交集类型与泛型(模板)最佳实践
开发语言·安全·php
小弥儿7 小时前
GPT Image 2 提示词库,把散落的生图提示词变成工程资产
开发语言·javascript·gpt·学习
楠楠子呀7 小时前
独立站聊天转化全链路:从二维码引流到数据复盘
java·javascript·数据仓库·python·c#·自动化·etl
空堂与归8 小时前
单机 Python 跑不动?Ray 分布式计算框架让 AI 训练提速 10 倍
开发语言·人工智能·python
JacksonMx8 小时前
Java 线程池:复用、Spring 管理、监控与线上故障排查全指南
开发语言·python