首页 > 代码库 > C# Meta Programming - Let Your Code Generate Code - 利用反射重写自动的ToString()
C# Meta Programming - Let Your Code Generate Code - 利用反射重写自动的ToString()
我们在写一些Model的时候,经常会重写ToString,为了在控制台中进行打印或者更好的单元测试。
但是,如果Model的字段非常多的时候,如此简单的重复劳动经常会变成一件令人头痛的事情,因为大家
都不想重复劳动,或者这种事情应该交给初级程序员或者毕业生去做。
看如下:
public class Customer{ public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public override string ToString() { string format = "First Name: {0}\nLast Name: {1}\nAge: {2}\n"; return string.Format(format, FirstName, LastName, Age); }}
如果充分利用反射的特性,我们可以做一个扩展方法,请看如下:
public static class ObjectExtensions{ public static string ToStringReflection<T>(this T @this) { var query = from prop in @this.GetType().GetProperties( BindingFlags.Instance | BindingFlags.Public) where prop.CanRead select string.Format("{0}: {1}\n", prop.Name, prop.GetValue(@this, null)); string[] fields = query.ToArray(); StringBuilder format = new StringBuilder(); foreach (string field in fields) { format.Append(field); } return format.ToString(); }}
这样,我们在原来的代码中只要写一句话:
namespace Zeus.Thunder.Test.Model{ public class Customer { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public override string ToString() { return this.ToStringReflection(); } }}
测试程序:
Customer customer = new Customer(){ FirstName = "Master", LastName = "HaKu", Age = 20};Console.WriteLine(customer.ToString());
运行结果如下:
FirstName: Master
LastName: HaKu
Age: 20
C# Meta Programming - Let Your Code Generate Code - 利用反射重写自动的ToString()
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。