如何使用“;重写字符串ToString()”;方法在一个类中两次

本文关键字:一个 两次 重写 何使用 字符串 ToString 方法 | 更新日期: 2023-09-27 17:58:00

我已经为类中定义的两个属性使用了这个方法。属性为

public bool HasImage { get; set; }
public DateTimeOffset? StartDate { get; set; }

public override string ToString()
{
    string value = "";
    if (StartDate.HasValue)
    {
        if (StartDate == DateTime.Today.Date)
            value = "1 Day";
        else if (StartDate < DateTime.Today.Date)
            value = "Past Due";
    }
    return value;
}

如何将此方法用于HasImage属性,这里我无法删除StartDate属性的方法。将结果导出到excel时,将调用上述方法。

如何使用“;重写字符串ToString()”;方法在一个类中两次

ToString的目的是创建对象本身的字符串表示。也就是说,你不会得到每个属性的ToString方法。您可以获得对象的一个方法。

如果要将单个属性转换为字符串,则需要自己提供这些方法,并根据需要显式调用它们。例如StartDateAsStringHasImageAsString之类的东西。

解决这一问题的一种优雅/常见的方法是实现IFormattable接口(查看完整示例的链接),如下所示:

public class MyClass : IFormattable
{
    public string ToString(string format, IFormatProvider formatProvider)
    {
        switch (format)
        {
            case "X": return x.ToString();
            case "Y": return y.ToString();
            // ...
        }
        return this.ToString();        
    }
}

然后不要使用默认的ToString方法,创建自己的方法(或者只具有getter的属性,它们做的事情与下面相同)。ToString方法应该表示该对象,而不一定表示其属性。

public string GetHasImage(){ return HasImage ? "Yes" : "No"; }
public string GetDateTimeOffset 
{
    return 
        !StartDate.HasValue ? string.Empty : 
        StartDate == DateTime.Today.Date ? 1 Day" : 
        StartDate < DateTime.Today.Date ? "Past Due" : 
        string.Empty;
}