如何将对象转换为具有格式字符串的字符串?

时间:2016-02-27 09:24:50

标签: c#

我有一个object,可以从intfloatdecimalDateTimeTimeSpan等方式加载。 现在,我想将其转换为带有格式字符串的string,例如"D4""P2""yyyyMMdd"。但是object类没有接收格式字符串的ToString方法。所以下面的代码不起作用。

string Format(object value, string format)
{
    return value.ToString(format); // error
}

以下是我丑陋的解决方法。

string Format(object value, string format)
{
    if (value is int) return ((int)value).ToString(format);
    if (value is float) return ((float)value).ToString(format);
    if (value is double) return ((double)value).ToString(format);
    if (value is decimal) return ((decimal)value).ToString(format);
    if (value is DateTime) return ((DateTime)value).ToString(format);
    if (value is TimeSpan) return ((TimeSpan)value).ToString(format);
    ...
}

有更聪明的方法吗?

1 个答案:

答案 0 :(得分:5)

有一个接口,它是IFormattable

public static string Format(object value, string format, IFormatProvider formatProvider = null)
{
    if (value == null)
    {
        return string.Empty;
    }

    IFormattable formattable = value as IFormattable;

    if (formattable != null)
    {
        return formattable.ToString(format, formatProvider);
    }

    throw new ArgumentException("value");
}

(此界面是各种string.Format使用的界面,Console.Write,...)