You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确重写ToString()方法?自定义实现为何未被调用?

问题分析与解决

核心问题拆解

  1. override报错原因:.NET中所有类的基类Object提供的ToString()是无参方法,你定义的ToString(string strFormat)是带参数的重载方法,不存在可重写的基类同名同签名方法,所以用override会报错。

  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:22:12