朋友遇到的一个问题:
从文本里读出的字符串("张三","20"...),类型以字符串形式已知("string","int"....)
希望转换成类对象。
数据多的情况下,频繁使用反射有可能影响效率,故写了个小demo如下:
Person类:
1 class Person 2 { 3 public string xm { get; set; } 4 public int nl { get; set; } 5 public void showme() 6 { 7 Console.WriteLine("我是" + xm + ",我今年" + nl + "岁。"); 8 } 9 }
转换辅助类:
class Convert_Helper { static PropertyInfo[] ps; //送入类型,反射回所有公共属性 public static void get_Props<T>(T tt) { ps=tt.GetType().GetProperties(); } //送入字符串和类型,返回指定类型的值 public static dynamic change_Type(string x,string x_type) { if(x_type=="int") { return int.Parse(x); } return x; } //送入对象、值和类型,为对象赋值。 public static void get_Object(dynamic obj,string[] myvalues,string[] valuetype) { for (int i = 0; i < myvalues.Length; i++) { ps[i].SetValue(obj, change_Type(myvalues[i], valuetype[i]), null); } } }
主程序:
1 static void Main(string[] args) 2 { 3 string[] v1,t1; 4 List<Person> mylist=new List<Person>(); 5 Person t; 6 Convert_Helper.get_Props(new Person()); 7 8 t = new Person(); 9 v1=new string[2]{"张三","20"}; 10 t1 = new string[2] { "string", "int" }; 11 Convert_Helper.get_Object(t,v1,t1); 12 mylist.Add(t); 13 14 t = new Person(); 15 v1 = new string[2] { "李四", "18" }; 16 t1 = new string[2] { "string", "int" }; 17 Convert_Helper.get_Object(t, v1, t1); 18 mylist.Add(t); 19 20 foreach (var item in mylist) 21 { 22 item.showme(); 23 } 24 Console.ReadKey(); 25 }
到此,文本即使是批量的二维数组或其他格式,主程序稍加修改即可;如果属性不对应,对get_Props方法稍加修改即可。
读者应该不难自己完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现