如何正确重写ToString()方法?自定义实现为何未被调用?
问题分析与解决
核心问题拆解
override报错原因:.NET中所有类的基类
Object提供的ToString()是无参方法,你定义的ToString(string strFormat)是带参数的重载方法,不存在可重写的基类同名同签名方法,所以用override会报错。new关键字无效原因:你代码里调用的
rs["ReportDateTime"].ToString("dd"),是调用SqlDataReader返回的字段对象(大概率是DateTime类型)的ToString方法,和你在Form_Processor类里定义的ToString(string strFormat)完全是两个不同对象的方法,根本没触发你自定义的方法。
正确解决方案
如果你想格式化数据库返回的ReportDateTime字段,有两种常用方式:
- 直接利用DateTime的格式化能力:先把字段值强转为
DateTime再调用自带的格式化方法,确保类型安全:DateTime reportTime = (DateTime)rs["ReportDateTime"]; result = reportTime.ToString("dd"); - 自定义格式化方法:如果需要特殊格式化逻辑,在
Form_Processor里写一个专属方法,而非重载ToString:public string FormatDateTime(DateTime dateTime, string format) { if (!string.IsNullOrEmpty(format)) { // 自定义格式化逻辑,比如特殊场景处理 return dateTime.ToString(format); } return dateTime.ToString(); } // 调用时 result = FormatDateTime((DateTime)rs["ReportDateTime"], "dd");
如果你确实想给Form_Processor类添加带参数的字符串转换方法,那必须调用Form_Processor实例的该方法才会生效,比如:
var processor = new Form_Processor(); string customStr = processor.ToString("dd"); // 这里才会调用你定义的new方法
内容的提问来源于stack exchange,提问作者KWallace
相关产品推荐
相关产品推荐

