怎么让重写ToString()变成不再是体力活
以前写代码类的时候不太喜欢Override ToString()方法,原因是重复性的体力活,没什么含量,而系统提供的实体类可能又满足不了你的实际需求,在这样的情况下,你是否有一种是在被强迫的情况下写代码。而且你要是
随便定义一个实体类,就要重写,那岂不累死,如果你不想做着重复的工作,那么此时你可试着去"偷懒",而且此方法比较通用,当然针对特别的类型我没做处理,如日期类型,但我想这里应该也不难,无非就是一个Is as 判断
的事,这里不多描述。
本文说的是取巧,那么先介绍一个数据契约属性【DataMember】,使用此属性的第一步是引用using System.Runtime.Serialization.然后在定义自己的类成员上使用【DataMember】,最后根据反射根据自己定义的和需要
获取的就可以遍历,最后输出完成重写ToString()方法了。
当然用此方法也有不足的地方,既然做到通用,那如果是特殊的那就满足不了,任何事情都是这样,想要灵活和想要具体就像鱼和熊掌一样。
最后附上代码类。
1 class WechatEntity 2 { 3 /// <summary> 4 /// 车牌 5 /// </summary> 6 [DataMember] 7 public string LicenseNum; 8 /// <summary> 9 /// 开始时间 10 /// </summary> 11 [DataMember] 12 public DateTime StartTime; 13 /// <summary> 14 /// 结束时间 15 /// </summary> 16 [DataMember] 17 public DateTime EndTime; 18 /// <summary> 19 /// 管理员名字 20 /// </summary> 21 [DataMember] 22 public string ManageName; 23 /// <summary> 24 /// 支付方式 25 /// </summary> 26 [DataMember] 27 public string PayMethod; 28 /// <summary> 29 /// 收费处 30 /// </summary> 31 [DataMember] 32 public string ChargePlace; 33 /// <summary> 34 /// 金额 35 /// </summary> 36 [DataMember] 37 public Decimal Money; 38 /// <summary> 39 /// 备注 40 /// </summary> 41 [DataMember] 42 public string Remark; 43 44 /// <summary> 45 /// 订单号 46 /// </summary> 47 [DataMember] 48 public string OrderID; 49 50 /// <summary> 51 /// 重写ToString()方法 52 /// </summary> 53 public override string ToString() 54 { 55 StringBuilder strBuilder = new StringBuilder(); 56 57 Type t = this.GetType(); 58 FieldInfo[] fields = t.GetFields(BindingFlags.Public | 59 BindingFlags.Instance); 60 61 for (int i = 0; i < fields.Length - 1; i++) 62 { 63 strBuilder.Append(fields[i].Name + " = " + 64 (fields[i].GetValue(this) ?? "") + " "); 65 } 66 67 return strBuilder.ToString(); 68 } 69 70 }