如何在一个类中两次使用“override string ToString()”方法

4

我已经使用这种方法来处理我的类中定义的两个属性。这些属性是:

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时被调用。
3个回答

4
< p > ToString 的目的是创建对象本身的字符串表示形式。也就是说,您不会为每个属性获得一个ToString方法。您只能为整个对象获得一个方法。

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


2

那么不要使用默认的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;
}

2

一种优雅/常见的解决方法是实现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();        
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接