我有一个object
,可以从int
,float
,decimal
,DateTime
,TimeSpan
等方式加载。
现在,我想将其转换为带有格式字符串的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);
...
}
有更聪明的方法吗?
答案 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
,...)