类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换
在游戏开发中,配置表是不可少的。通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来。
先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue()给类的对象赋值。但是配置表类型全部是string,类中的字段类型并不确定,这就需要我们再写个函数将string类型的配置表数据转化为不同类型的类里面的字段数据了。
配置表类 Config:
public class Config
{public int id;public int age;public string name;public int[] skills;
}
根据Config类,构造一个配置表 config.txt:(第一行的类型并不起作用,只是配表的时候看的)
上代码:
public Config ConfigDemo()
{//从配置表读取string类型的字符串,key为类的字段名,必须保持一致。value是准备赋值给Config对象的数据Dictionary<string, string> dicSetting = new Dictionary<string, string>();dicSetting.Add("id", "1");dicSetting.Add("age", "8");dicSetting.Add("name", "zxs");dicSetting.Add("skills", "9,5,2,7");//构造一个Config对象Config config = new Config();Type type = config.GetType();FieldInfo[] fields = type.GetFields();foreach(var oneField in fields){object value = ChangeType(dicSetting[oneField.Name], oneField.FieldType);oneField.SetValue(config, value);}return config;
}//string类型转换为不同的字段类型
public object ChangeType(string str,Type type)
{if (type == typeof(string)){return str;}if (type == typeof(int)){return int.Parse(str);}if (type == typeof(int[])){List<int> list = new List<int>();string[] strs = str.Split(',');foreach(string one in strs){list.Add(int.Parse(one));}return list.ToArray();}//...自己实现更多类型return null;
}
这样就完成了,配置表数据到类对象数据的转换。
类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换相关推荐
- java 反射 单例类_利用反射机制破坏单例模式
简介 利用反射机制破坏了单例模式,这里以懒汉单例模式为例子进行操作. 之前利用反射也是改变了类中的private变量. 类中的private变量真的private么? 正常的单例模式的实现 这里采用了 ...
- golang利用反射写入excel的简单工具类
golang利用反射写入excel的简单工具类 工具类源码 使用方法 工具类源码 package excelimport ("errors""github.com/tea ...
- mysql 查询两张表结构相同的数据库_利用反射处理多个表结构相同的数据的查询和数据库表的关联...
最近做一个项目,需要对人口数据进行查询,但是人口数据分布在不同的街道表中,首先进行了数据表结构的统一,每个数据表以街道名开头,然后其他的名字都一样 前期将各个表中的字段也进行了统一 抽象出一张字典表 ...
- php引用公有类方法_PHP 利用反射(ReflectionClass)调用其他类的方法 | 剑花烟雨江南...
在相对复杂的项目中,我们可以利用分层来降低代码的耦合,并封装一些公用的方法,加快我们的开发速度.因此,在实际开发中,可以将代码分为: 控制器层.服务层.逻辑层.模型层等等.... 服务层: 所谓的服务 ...
- vba listbox 内容输出到文本_利用剪贴板提取工作表的文本内容
大家好,我们今日讲解"VBA信息获取与处理"教程中第十二个专题"VBA中剪贴板(Clipboard)的应用"的第六节"利用剪贴板提取工作表的文本内容& ...
- python mysql 分页_利用python对mysql表做全局模糊搜索并分页实例
在写django项目的时候,有的数据没有使用模型管理(数据表是动态添加的),所以要直接使用mysql.前端请求数据的时候可能会指定这几个参数:要请求的页号,页大小,以及检索条件. "&quo ...
- python 表格格式输出_利用python对excel中一列的时间数据更改格式操作
问题场景:需要将下列的交期一列的数据格式更改成2019/05/10 存货编码 尺寸 数量 交期 0 K10Y0190000X B140 200 2019-05-10 00:00:00 1 K10Y01 ...
- java两个对象赋值_一起学Java(二十六)----- 对象之间赋值
不积跬步,无以至千里:不积小流,无以成江海. Java语言基础 Java对象之间赋值 赋值是用等号运算符" = "进行的,在对对象进行"赋值"时,实际就是将句柄 ...
- python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例
本篇文章小编给大家分享一下利用python对excel中一列的时间数据更改格式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 问题场景:需要将 ...
最新文章
- python自动化干什么-高效工作,拒绝加班,看Python自动化功能到底有多强大
- 第5章-Vue.js交互及生命周期练习
- Linux Kernel 0.01 的编译和运行
- the Open Source Community
- 2020年牛客多校第五场C题-easy(纯组合计数不要生成函数的做法)
- SharePoint安全 - SharePoint网站常用页面URL索引
- 《深入剖析Tomcat》阅读(三)
- python 秒数转化为时分秒
- 大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建
- 《管理的常识》3-“什么是组织结构”读后感及读书笔记
- Spring boot Mybatis-Plus数据库单测实战(三种方式)
- 如何换ionic里面的图标
- AUTOCAD——永久关闭栅格
- 【转】我的大学六年(单片机大师郭天祥原创)
- 实现网站访问人数统计
- 微信小程序 支付回调不成功排查步骤
- google的黑镜子 -- 思考技术元素对生活的影响
- 《DeepLung: Deep 3D Dual Path Nets for Automated Pulmonary Nodule Detection and Classification》网络模型解读
- dxc 4.0 控制线程
- SQLselect提示列名无效